Vichuploader & API 平台文件未保存

Posted

技术标签:

【中文标题】Vichuploader & API 平台文件未保存【英文标题】:Vichuploader & API platform File is not saved 【发布时间】:2022-01-04 21:44:00 【问题描述】:

我的问题实际上是用 vich 上传文件。它与其他实体完美配合。但在我的用户实体中它不起作用。

Vich 上传器配置:

vich_uploader:
db_driver: orm
mappings:
   user_cover:
       uri_prefix: /media/users
       upload_destination: '%kernel.project_dir%/public/media/users'
       namer: Vich\UploaderBundle\Naming\OrignameNamer
       delete_on_update:   true
       delete_on_remove:   true
   play_media:
       uri_prefix: /media/defis
       upload_destination: '%kernel.project_dir%/public/media/defis'
       namer: Vich\UploaderBundle\Naming\OrignameNamer
       delete_on_update:   true
       delete_on_remove:   true    

play_media 映射完美运行,但我的问题来自 user_cover

与我的用户实体相关的部分:

   /**
               * @ORM\Column(type="string", length=255, nullable=true)
               */
               #[Groups(['read:User'] )]
               private $CoverPath;
           
                /**
                * @var File|null
                * @Assert\File(
                *     maxSize = "2048k",
                *     mimeTypes = "image/jpeg", "image/png",
                *     mimeTypesMessage = "Please upload a valid cover image: jpeg or png under 2048k")
                * @Vich\UploadableField(mapping="play_media_test", fileNameProperty="CoverPath")
                */
                private $file;    


 /**
                * Set the value of file
                *
                *  @param File|null  $file
                *  @return User
                */ 
               public function setFile(?File $file = null) :User
               
           
                   $this->file = $file;
           
                   if ($file instanceof File) 
                       $this->setUpdatedAt(new \DateTime());
                   
           
                   return $this;
                   
                   

和我的控制器(还没有检查),理论上我认为我不应该更新日期,因为设置器已经在这样做并且不需要使用实体管理器(我无论如何都尝试过),但是...... :

public function __invoke(Request $request)

    $user_data = $request->attributes->get('data');
    $user_data->setFile($request->files->get('cover'));
    $user_data->setUpdatedAt(new DateTime());
    return $user_data;
    

和操作配置:

'cover' => [
                   'method' => 'POST' ,
                   'path' => 'user/id/cover',
                   'deserialize' => false,
                   'controller' => PostCoverUserController::class,
                   'openapi_context' => [
                       'security' => 
                       [['bearerAuth' => []]], 
                       'summary'     => 'Update the user cover image ',
                       'requestBody' => [
                           'content' => [
                               'multipart/form-data' => [
                                   'schema' => [
                                       'type' => 'object',
                                       'properties' => [
                                           'cover' => [
                                               'type' => 'string', 
                                               'format' => 'biniray'
                                           ]
                                       ]
                                   ]
                               ]
                           ]
                       ]
                       ]                                                                      
               ],    

我多次重读我的代码,但我不明白为什么持久性没有按预期工作?但是我的其他上传工作完美。 api发回答案,dd有效..只有持久性失败。 谢谢你的帮助

【问题讨论】:

【参考方案1】:

问题来自服务器的缓存: php bin / 控制台缓存:清除 ;)

【讨论】:

以上是关于Vichuploader & API 平台文件未保存的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5. EasyAdmin 3. VichUploader。同时上传多个文件

Symfony VichUploader:无法看到要上传的文件按钮

Symfony vichUploader tmp 文件不存在

无法确定类“App\Entity\XXXX”中属性“image”的访问类型。 Symfony 4 - EasyAdmin 3.2 - VichUploader

VichUploader和CroppieJS:如何发送base64裁剪图像以在Symfony 4中保留

strapi 开源api && 内容管理平台试用