CompanyUploadService.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * Created by IntelliJ IDEA.
  4. * User: kelyliang
  5. * Date: 2024/7/2
  6. * Time: 下午 12:05
  7. */
  8. namespace App\Services\File\Upload;
  9. use App\Http\Resources\API\FileUploadSuccessResource;
  10. use App\Models\File;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Http\UploadedFile;
  13. class CompanyUploadService
  14. {
  15. public function __construct(protected Request $request)
  16. {
  17. }
  18. public function upload(): array
  19. {
  20. $items = [];
  21. $fileNames = $this->request->get("file_names", []);
  22. $files=$this->request->file("files");
  23. if($files === null){
  24. return [];
  25. }
  26. foreach ($files as $index => $file) {
  27. $item = $this->uploadFile($this->request, $file);
  28. $item['file']['title'] = $fileNames[$index] ?? $item['file']['title'];
  29. $items[] = $item;
  30. }
  31. $uploadedFiles = $this->storeFiles($items);
  32. return $uploadedFiles;
  33. }
  34. protected function uploadFile(Request $request, UploadedFile $file): array
  35. {
  36. $extension = $file->getClientOriginalExtension() ? $file->getClientOriginalExtension(): pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
  37. $pathname = $file->storeAs(
  38. sprintf("c%s/%s/%s", uniqid(), $request->get("object_type"), date("Ymd")),
  39. sprintf("%s.%s", md5(uniqid()), $extension)
  40. );
  41. throw_validation_if(! $pathname, "File upload failed.");
  42. $data['file'] = [
  43. 'pathname' => $pathname,
  44. 'title' => $file->getClientOriginalName(),
  45. 'size' => $file->getSize(),
  46. 'extension' => $extension,
  47. 'company_id' => uniqid(),
  48. 'object_type' => $request->object_type,
  49. 'source' => $request->get("source", 1),
  50. ];
  51. return $data;
  52. }
  53. protected function storeFiles(array $items)
  54. {
  55. $uploadedFiles = [];
  56. foreach ($items as $item) {
  57. $fileInfo = $item['file'];
  58. $file = File::query()->create($fileInfo);
  59. $uploadedFiles[] = new FileUploadSuccessResource($file);
  60. }
  61. return $uploadedFiles;
  62. }
  63. }