CompanyUploadService.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. foreach ($this->request->file("files") as $index => $file) {
  23. $item = $this->uploadFile($this->request, $file);
  24. $item['file']['title'] = $fileNames[$index] ?? $item['file']['title'];
  25. $items[] = $item;
  26. }
  27. $uploadedFiles = $this->storeFiles($items);
  28. return $uploadedFiles;
  29. }
  30. protected function uploadFile(Request $request, UploadedFile $file): array
  31. {
  32. $extension = $file->getClientOriginalExtension() ? $file->getClientOriginalExtension(): pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
  33. $pathname = $file->storeAs(
  34. sprintf("c%s/%s/%s", uniqid(), $request->get("object_type"), date("Ymd")),
  35. sprintf("%s.%s", md5(uniqid()), $extension)
  36. );
  37. throw_validation_if(! $pathname, "File upload failed.");
  38. $data['file'] = [
  39. 'pathname' => $pathname,
  40. 'title' => $file->getClientOriginalName(),
  41. 'size' => $file->getSize(),
  42. 'extension' => $extension,
  43. 'company_id' => uniqid(),
  44. 'object_type' => $request->object_type,
  45. 'source' => $request->get("source", 1),
  46. ];
  47. return $data;
  48. }
  49. protected function storeFiles(array $items)
  50. {
  51. $uploadedFiles = [];
  52. foreach ($items as $item) {
  53. $fileInfo = $item['file'];
  54. $file = File::query()->create($fileInfo);
  55. $uploadedFiles[] = new FileUploadSuccessResource($file);
  56. }
  57. return $uploadedFiles;
  58. }
  59. }