Controller.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Traits\RestfulResponse;
  4. use Illuminate\Foundation\Bus\DispatchesJobs;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Http\UploadedFile;
  7. use Illuminate\Routing\Controller as BaseController;
  8. use Illuminate\Foundation\Validation\ValidatesRequests;
  9. use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
  10. use Illuminate\Support\Facades\Storage;
  11. class Controller extends BaseController
  12. {
  13. /**
  14. * 传入上传目录的字段
  15. */
  16. const UPLOAD_FOLDER_FIELD = '_upload_dir';
  17. /**
  18. * 上传根目录
  19. */
  20. const UPLOAD_FOLDER_PREFIX = 'uploads';
  21. use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
  22. use RestfulResponse;
  23. /**
  24. * 保存请求中的文件到 storage,并返回各文件相关的信息
  25. *
  26. * @param Request $request
  27. *
  28. * @return array
  29. *
  30. * 返回数据示例
  31. * [
  32. * 'file' => [
  33. * 'filename' => 'filename.jpg',
  34. * 'ext' => 'jpg',
  35. * 'path' => '/path/to/filename.jpg',
  36. * 'size' => 10240,
  37. * 'mime_type' => 'image/jpeg',
  38. * ],
  39. * 'other' => [...],
  40. * ]
  41. */
  42. protected function saveFiles(Request $request): array
  43. {
  44. $files = $request->file();
  45. $driver = Storage::disk('uploads');
  46. $folder = $request->input(static::UPLOAD_FOLDER_FIELD);
  47. $folder = static::UPLOAD_FOLDER_PREFIX.($folder ? '/'.trim($folder, '/') : '');
  48. $files = array_map(function (UploadedFile $file) use ($driver, $folder) {
  49. $md5 = md5_file($file);
  50. $ext = $file->getClientOriginalExtension();
  51. $filename = $md5.($ext ? ".{$ext}" : '');
  52. $path = $driver->putFileAs($folder, $file, $filename);
  53. return [
  54. 'filename' => $filename,
  55. 'ext' => $ext,
  56. 'path' => $path,
  57. 'size' => $file->getSize(),
  58. 'mime_type' => $file->getMimeType(),
  59. ];
  60. }, $files);
  61. return $files;
  62. }
  63. }