文件上传

main
Jing Li 2024-04-13 19:42:54 +08:00
parent 86648e67fc
commit 9b4e798fee
2 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,57 @@
<?php
namespace App\Http\Controllers\Api;
use App\Exceptions\RuntimeException;
use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules\File;
class FileUploadController extends Controller
{
public function __invoke(Request $request)
{
$request->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;
}
}

View File

@ -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']);