ソースを参照

file download

moell 11 ヶ月 前
コミット
4d5c2bbb1e

+ 10 - 3
app/Http/Controllers/API/FileController.php

@@ -15,10 +15,17 @@ use Illuminate\Support\Facades\Storage;
 class FileController extends Controller
 {
 
-    public function download(DownloadRequest $request)
+    public function download(string $id)
     {
-        $url=$request->url;
-        return Storage::download($url);
+        $file = File::query()->findOrFail($id);
+
+        $fileObjectType = FileObjectType::from($file->object_type);
+        $fileObjectType->modelBuilderAllowed($file->object_id)->findOrFail($file->object_id);
+
+        return Storage::download(
+            $file->pathname,
+            sprintf("%s.%s", rtrim($file->title, "." . $file->extension), $file->extension)
+        );
     }
 
     /**

+ 1 - 9
app/Http/Requests/API/File/DownloadRequest.php

@@ -25,15 +25,7 @@ class DownloadRequest extends FormRequest
     public function rules(): array
     {
         return [
-            'url' => [
-                'required',
-                function ($attribute, $value, $fail) {
-                    // 检查文件是否存在默认存储对象系统中
-                    if (!Storage::exists($value)) {
-                        $fail('url file does not exist');
-                    }
-                },
-            ],
+            "id" => "required",
         ];
     }
 }

+ 1 - 2
routes/api.php

@@ -115,8 +115,6 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::get("plan-by-assets", [API\PlanController::class, "byAssets"])->name("plan.by-assets");
         Route::get("requirement-by-assets", [API\RequirementController::class, "byAssets"])->name("requirement.by-assets");
 
-        Route::post("download", [API\FileController::class, "download"])->name("fileDownload");
-
         Route::post("task-batch-create", [API\TaskController::class, "batchStore"])->name("task.batch-store");
 
         Route::get("project-tree/{project_id}", [API\ProjectController::class, "treeIndex"])->name("project.project-tree");
@@ -129,5 +127,6 @@ Route::middleware(['auth:sanctum'])->group(function () {
 
         Route::post("file-upload", [API\FileController::class, "upload"])->name("file.upload");
         Route::get("file/{object_type}/{object_id}", [API\FileController::class, "byObject"])->name("file.by-object");
+        Route::post("file/{file}/download", [API\FileController::class, "download"])->name("file.download");
     });
 });