|
@@ -0,0 +1,76 @@
|
|
|
+<?php
|
|
|
+/**
|
|
|
+ * Created by IntelliJ IDEA.
|
|
|
+ * User: kelyliang
|
|
|
+ * Date: 2024/7/2
|
|
|
+ * Time: 下午 12:05
|
|
|
+ */
|
|
|
+
|
|
|
+namespace App\Services\File\Upload;
|
|
|
+
|
|
|
+
|
|
|
+use App\Http\Resources\API\FileUploadSuccessResource;
|
|
|
+use App\Models\File;
|
|
|
+use Illuminate\Http\Request;
|
|
|
+use Illuminate\Http\UploadedFile;
|
|
|
+
|
|
|
+class CompanyUploadService
|
|
|
+{
|
|
|
+ public function __construct(protected Request $request)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public function upload(): array
|
|
|
+ {
|
|
|
+ $items = [];
|
|
|
+ $fileNames = $this->request->get("file_names", []);
|
|
|
+ foreach ($this->request->file("files") as $index => $file) {
|
|
|
+
|
|
|
+ $item = $this->uploadFile($this->request, $file);
|
|
|
+ $item['file']['title'] = $fileNames[$index] ?? $item['file']['title'];
|
|
|
+
|
|
|
+ $items[] = $item;
|
|
|
+ }
|
|
|
+ $uploadedFiles = $this->storeFiles($items);
|
|
|
+
|
|
|
+ return $uploadedFiles;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected function uploadFile(Request $request, UploadedFile $file): array
|
|
|
+ {
|
|
|
+ $extension = $file->getClientOriginalExtension() ? $file->getClientOriginalExtension(): pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
|
|
|
+
|
|
|
+ $pathname = $file->storeAs(
|
|
|
+ sprintf("c%s/%s/%s", uniqid(), $request->get("object_type"), date("Ymd")),
|
|
|
+ sprintf("%s.%s", md5(uniqid()), $extension)
|
|
|
+ );
|
|
|
+ throw_validation_if(! $pathname, "File upload failed.");
|
|
|
+
|
|
|
+ $data['file'] = [
|
|
|
+ 'pathname' => $pathname,
|
|
|
+ 'title' => $file->getClientOriginalName(),
|
|
|
+ 'size' => $file->getSize(),
|
|
|
+ 'extension' => $extension,
|
|
|
+ 'company_id' => uniqid(),
|
|
|
+ 'object_type' => $request->object_type,
|
|
|
+ 'source' => $request->get("source", 1),
|
|
|
+ ];
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ protected function storeFiles(array $items)
|
|
|
+ {
|
|
|
+ $uploadedFiles = [];
|
|
|
+ foreach ($items as $item) {
|
|
|
+ $fileInfo = $item['file'];
|
|
|
+ $file = File::query()->create($fileInfo);
|
|
|
+ $uploadedFiles[] = new FileUploadSuccessResource($file);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $uploadedFiles;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|