diff --git a/app/Http/Controllers/Api/FileUploadController.php b/app/Http/Controllers/Api/FileUploadController.php new file mode 100644 index 0000000..c33250d --- /dev/null +++ b/app/Http/Controllers/Api/FileUploadController.php @@ -0,0 +1,57 @@ +validate( + rules: [ + 'file' => [ + 'bail', + 'required', + File::types(['image/jpeg', 'image/png']) + ->extensions(['jpg', 'jpeg', 'png']) + ->max(20 * 1024), + ], + ], + attributes: [ + 'file' => '文件', + ], + ); + + /** @var \Illuminate\Http\UploadedFile */ + $file = $request->file('file'); + + if ($path = $file->storeAs(date('Ymd'), $this->filename($file))) { + return [ + 'url' => Storage::url($path), + ]; + } + + throw new RuntimeException('上传失败,请重试'); + } + + protected function filename(UploadedFile $file): string + { + $hash = Str::random(40); + + $extension = ''; + + if ($originalExtension = $file->getClientOriginalExtension()) { + $extension = '.'.$originalExtension; + } elseif ($guessExtension = $this->guessExtension()) { + $extension = '.'.$guessExtension; + } + + return $hash.$extension; + } +} diff --git a/routes/api.php b/routes/api.php index 9d57a19..45df734 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Api\Account\StoreMasterCommissionController; use App\Http\Controllers\Api\Auth\AccessTokenController; use App\Http\Controllers\Api\ComplaintController; use App\Http\Controllers\Api\FeedbackController; +use App\Http\Controllers\Api\FileUploadController; use App\Http\Controllers\Api\KeywordController; use App\Http\Controllers\Api\Ledger\LedgerController; use App\Http\Controllers\Api\Ledger\LotteryTypeController; @@ -19,6 +20,8 @@ Route::group([ ], function () { // 字典表 Route::get('keywords', [KeywordController::class, 'index']); + // 文件上传 + Route::post('fileupload', FileUploadController::class); // 当前账户信息 Route::get('auth/profile', [\App\Http\Controllers\Api\Auth\UserController::class, 'profile']);