Преглед изворни кода

add simple image upload functionnality

Olivier Massot пре 2 година
родитељ
комит
f8a4a3b098

+ 33 - 9
src/ApiResources/Core/File/UploadRequest.php

@@ -30,7 +30,6 @@ use Ramsey\Uuid\Uuid;
 class UploadRequest
 {
     /**
-     * Only because id is required
      * @var int | null
      */
     #[ApiProperty(identifier: true)]
@@ -43,7 +42,7 @@ class UploadRequest
     private string $filename;
 
     /**
-     * The content of the uploaded file
+     * Le contenu du fichier uploadé encodé au format Base64
      * @var string
      */
     private string $content;
@@ -57,9 +56,10 @@ class UploadRequest
 
     /**
      * Le type de fichier uploadé, si connu
-     * @var FileTypeEnum
+     * @var string
      */
-    private FileTypeEnum $type;
+    #[Assert\Choice(callback: [FileTypeEnum::class, 'toArray'])]
+    private string $type = "NONE";
 
     /**
      * Visibilité du fichier
@@ -73,9 +73,15 @@ class UploadRequest
      */
     private ?string $mimeType = null;
 
+    /**
+     * Configuration du fichier (par exemple le cropping d'une image)
+     * @var string
+     */
+    private ?string $config = null;
+
     public function __construct()
     {
-        $this->type = FileTypeEnum::NONE();
+        $this->type = FileTypeEnum::NONE()->getValue();
     }
 
     /**
@@ -150,18 +156,18 @@ class UploadRequest
     }
 
     /**
-     * @return FileTypeEnum
+     * @return string
      */
-    public function getType(): FileTypeEnum
+    public function getType(): string
     {
         return $this->type;
     }
 
     /**
-     * @param FileTypeEnum $type
+     * @param string $type
      * @return self
      */
-    public function setType(FileTypeEnum $type): self
+    public function setType(string $type): self
     {
         $this->type = $type;
         return $this;
@@ -202,4 +208,22 @@ class UploadRequest
         $this->mimeType = $mimeType;
         return $this;
     }
+
+    /**
+     * @return string|null
+     */
+    public function getConfig(): ?string
+    {
+        return $this->config;
+    }
+
+    /**
+     * @param string|null $config
+     * @return self
+     */
+    public function setConfig(?string $config): self
+    {
+        $this->config = $config;
+        return $this;
+    }
 }

+ 2 - 0
src/Entity/Core/File.php

@@ -16,6 +16,7 @@ use App\Entity\Organization\OnlineRegistrationSettings;
 use App\Entity\Organization\Organization;
 use App\Entity\Person\Person;
 use App\Enum\Core\FileHostEnum;
+use App\Enum\Core\FileTypeEnum;
 use App\Repository\Core\FileRepository;
 use App\Entity\Organization\Parameters;
 use DateTime;
@@ -107,6 +108,7 @@ class File
      * @var string
      */
     #[ORM\Column(length: 50, options: ['default' => 'NONE'])]
+    #[Assert\Choice(callback: [FileTypeEnum::class, 'toArray'])]
     private string $type = "NONE";
 
     /**

+ 3 - 1
src/Service/File/FileManager.php

@@ -120,6 +120,7 @@ class FileManager
      * @param bool $isTemporary
      * @param string|null $mimeType
      * @param string $visibility
+     * @param string|null $config
      * @return File
      */
     public function makeFile (
@@ -130,7 +131,8 @@ class FileManager
         Access                         $author,
         bool                           $isTemporary = false,
         string                         $visibility = 'NOBODY',
-        string                         $mimeType = null
+        string                         $mimeType = null,
+        string                         $config = null
     ): File {
         return $this
             ->localStorage

+ 8 - 1
src/Service/File/Storage/LocalStorage.php

@@ -199,6 +199,7 @@ class LocalStorage implements FileStorageInterface
      * @param bool $isTemporary
      * @param string|null $mimeType
      * @param string $visibility
+     * @param string|null $config
      * @return File
      */
     public function makeFile (
@@ -209,7 +210,8 @@ class LocalStorage implements FileStorageInterface
         Access                         $author,
         bool                           $isTemporary = false,
         string                         $visibility = 'NOBODY',
-        string                         $mimeType = null
+        string                         $mimeType = null,
+        string                         $config = null
     ): File
     {
         $file = $this->prepareFile(
@@ -223,6 +225,11 @@ class LocalStorage implements FileStorageInterface
             false
         );
 
+        if (!empty($config)) {
+            // TODO: Déplacer dans le prepareFile?
+            $file->setConfig($config);
+        }
+
         return $this->write($file, $content, $author);
     }
 

+ 5 - 3
src/State/Processor/Core/UploadRequestProcessor.php

@@ -12,6 +12,7 @@ use App\ApiResources\Core\File\DownloadRequest;
 use App\ApiResources\Core\File\UploadRequest;
 use App\Entity\Access\Access;
 use App\Enum\Core\FileStatusEnum;
+use App\Enum\Core\FileTypeEnum;
 use App\Repository\Core\FileRepository;
 use App\Service\File\Exception\FileNotFoundException;
 use App\Service\File\FileManager;
@@ -60,12 +61,13 @@ final class UploadRequestProcessor implements ProcessorInterface
         $file = $this->fileManager->makeFile(
             $uploadRequest->isOrganizationOwned() ? $author->getOrganization() : $author,
             $uploadRequest->getFilename(),
-            $uploadRequest->getType(),
-            $uploadRequest->getContent(),
+            FileTypeEnum::from($uploadRequest->getType()),
+            base64_decode($uploadRequest->getContent()),
             $author,
             false,
             $uploadRequest->getVisibility(),
-            $uploadRequest->getMimeType()
+            $uploadRequest->getMimeType(),
+            $uploadRequest->getConfig()
         );
 
         $uploadRequest->setFileId($file->getId());