diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index f5df5aec..baddbb17 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -12,6 +12,8 @@ use App\Models\FileUser; use App\Models\User; use App\Module\Base; use App\Module\Ihttp; +use App\Tasks\BatchRemoveFileTask; +use Hhxsv5\LaravelS\Swoole\Task\Task; use Illuminate\Support\Facades\DB; use Request; @@ -371,6 +373,33 @@ class FileController extends AbstractController return Base::retSuccess('删除成功', $file); } + /** + * @api {get} api/file/batch/remove 批量删除文件 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup file + * @apiName batchRemove + * + * @apiParam {Array} ids 文件ID + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + * + * @return array + */ + public function batch__remove(): array + { + $ids = Request::input('ids'); + if ( empty($ids) || !is_array($ids) ) { + return Base::retError("请选择要删除的文件"); + } + $task = new BatchRemoveFileTask($ids, User::userid()); + Task::deliver($task); + return Base::retSuccess('success'); + } + /** * @api {get} api/file/content 08. 获取文件内容 * diff --git a/app/Tasks/BatchRemoveFileTask.php b/app/Tasks/BatchRemoveFileTask.php new file mode 100644 index 00000000..5ef3d711 --- /dev/null +++ b/app/Tasks/BatchRemoveFileTask.php @@ -0,0 +1,55 @@ +_ids = $ids; + $this->_userid = $userid; + } + + public function start() + { + foreach ($this->_ids as $id) { + Log::info("---------- $id ----------"); + Log::info("尝试删除Id为[$id]的文件"); + $file = File::find($id); + if (empty($file)) { + Log::warning("Id为[$id]的文件不存在或已被删除"); + continue; + } + Log::info("获取到文件名为[" . $file->name . "],类型为[" . ( $file->type ?: $file->ext ) . "]"); + $permission = $file->getPermission($this->_userid); + if ($permission < 1000) { + Log::warning("文件[$id][" . $file->name . "]仅限所有者或创建者操作"); + continue; + } + try { + $file->deleteFile(); + Log::info("删除Id为[$id]的文件成功"); + } catch (Throwable $throwable) { + Log::error("删除Id为[$id]的文件失败,原因是:" . $throwable->getMessage()); + } + } + } +} diff --git a/resources/assets/js/pages/manage/file.vue b/resources/assets/js/pages/manage/file.vue index 36eeb1fe..91dbc4c4 100644 --- a/resources/assets/js/pages/manage/file.vue +++ b/resources/assets/js/pages/manage/file.vue @@ -37,6 +37,8 @@ "{{shearFile.name}}" + +