123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?php
- namespace App\Http\Controllers\admin;
- use App\Constants\HttpStatus;
- use App\Constants\Util;
- use App\Http\Controllers\Controller;
- use Illuminate\Support\Facades\Storage;
- use Illuminate\Validation\ValidationException;
- use Exception;
- class Upload extends Controller
- {
- /**
- * @api {post} /admin/upload/uploadFile 上传文件
- * @apiGroup Upload
- * @apiUse result
- * @apiUse header
- * @apiVersion 1.0.0
- * @apiParam {File} image 图像文件的路径(本地路径)
- * - 文件大小限制:最大 10MB。
- * - 支持图像格式:`jpg`, `jpeg`, `png`,`webp`。
- */
- public function store()
- {
- try {
- request()->validate([
- 'image' => ['required', 'image', 'mimes:jpg,jpeg,png,webp', 'max:10240'],
- ]);
- if (request()->hasFile('image')) {
- $image = request()->file('image');
- $imageName = md5_file($image->getRealPath());
- if ($image->getClientOriginalExtension() == '') {
- $imageName .= '.webp';
- } else {
- $imageName .= '.' . $image->getClientOriginalExtension();
- }
- $filePath = storage_path('app/public/images/' . $imageName);
- if (!file_exists($filePath)) {
- $path = $image->storeAs('images', $imageName, 'public');
- $path = Storage::url($path);
- } else {
- $path = Storage::url('images/' . $imageName);
- }
- } else {
- throw new Exception('', HttpStatus::FILE_UPLOAD_ERROR);
- }
- } catch (ValidationException $e) {
- return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
- } catch (Exception $e) {
- return $this->error($e->getCode());
- }
- return $this->success(['path' => Util::ensureUrl($path)]);
- }
- /**
- * @api {post} /admin/upload/uploadVideo 上传视频
- * @apiGroup Upload
- * @apiUse result
- * @apiUse header
- * @apiVersion 1.0.0
- * @apiParam {File} file 附件的路径(本地路径)
- * - 文件大小限制:最大 50MB。
- * - 支持视频格式:`mp4`,`mov`,`avi`,`webm`
- */
- public function video()
- {
- try {
- request()->validate([
- 'file' => [
- 'required',
- 'file',
- 'mimes:jpg,jpeg,png,webp,mp4,mov,avi,webm',
- 'max:51200' // 最大 50MB,单位KB
- ],
- ]);
- if (request()->hasFile('file')) {
- $file = request()->file('file');
- $fileName = md5_file($file->getRealPath());
- // 获取原始扩展名
- $extension = $file->getClientOriginalExtension();
- $fileName .= $extension ? ('.' . $extension) : '';
- // 根据类型判断存放目录(可选)
- $isImage = in_array(strtolower($extension), ['jpg', 'jpeg', 'png', 'webp']);
- $dir = $isImage ? 'images' : 'videos';
- $filePath = storage_path("app/public/{$dir}/" . $fileName);
- if (!file_exists($filePath)) {
- $path = $file->storeAs($dir, $fileName, 'public');
- $path = Storage::url($path);
- } else {
- $path = Storage::url("{$dir}/" . $fileName);
- }
- } else {
- throw new Exception('', HttpStatus::FILE_UPLOAD_ERROR);
- }
- } catch (ValidationException $e) {
- return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
- } catch (Exception $e) {
- return $this->error($e->getCode());
- }
- return $this->success(['path' => Util::ensureUrl($path)]);
- }
- }
|