首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件"“不存在(VichUploaderBundle)

文件"“不存在(VichUploaderBundle)
EN

Stack Overflow用户
提问于 2019-04-17 04:33:12
回答 1查看 598关注 0票数 1

我的问题是,当我尝试上传一个结合使用VichUploadBundler和sonata-admin的mp3文件时,我在上传文件时得到了以下错误。

代码语言:javascript
复制
"The file "" was not found"

我已经在我的项目中有了另一个表单,在那里我上传了一些图像,我对它们没有任何问题,所以我非常震惊,因为我认为音频文件会更容易

这是我的实体文件

代码语言:javascript
复制
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="episode_audio", fileNameProperty="audioName")
*
* @var File
*/
private $audioFile;

/**
* @ORM\Column(type="string", length=255)
*
* @var string
*/
private $audioName;

/**
* @ORM\Column(type="datetime")
*
* @var \DateTime
*/
private $updatedAt;

/**
* If manually uploading a file (i.e. not using Symfony Form) ensure an instance
* of 'UploadedFile' is injected into this setter to trigger the update. If this
* bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
* must be able to accept an instance of 'File' as the bundle will inject one here
* during Doctrine hydration.
*
* @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $audioFile
*/
public function setAudioFile(?File $audioFile = null): void
{
   $this->audioFile = $audioFile;
   if (null !== $audioFile) {
       // It is required that at least one field changes if you are using doctrine
       // otherwise the event listeners won't be called and the file is lost
       $this->updatedAt = new \DateTimeImmutable();
   }
 }

public function getAudioFile(): ?File
{
   return $this->audioFile;
}

public function setAudioName(?string $audioName): void
{
    $this->audioName = $audioName;
}

public function getAudioName(): ?string
{
    return $this->audioName;
}

我的vich_uploader.yaml文件

代码语言:javascript
复制
vich_uploader:
    db_driver: orm

    mappings:
        ..//

        episode_audio:
            uri_prefix: /audio
            upload_destination: '%kernel.project_dir%/public/audio/'
            delete_on_update: true
            delete_on_remove: true
            inject_on_load: true

最后是我的管理类

代码语言:javascript
复制
    protected function configureFormFields(FormMapper $formMapper) {
    $formMapper
      ->add('audioName')
      ->add('audioFile', VichFileType::class, [
        'label' => 'Audio'
      ]);
    }

我只想能够在我的文件夹中看到我的音频文件,就像图像一样,我很确定这是很愚蠢的事情,如果你们需要在我的代码中看到其他东西,只需询问,这样我就可以更新问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 22:34:37

我不得不改变一些事情来解决我的问题。

首先,我在实体中添加了一个名为"$audioSize“的新属性,如下所示:

代码语言:javascript
复制
 /**
 * @ORM\Column(type="integer")
 *
 * @var integer
 */
private $audioSize;

//getters and setters ...

我还必须更改我的audioFile属性,如下所示...

代码语言:javascript
复制
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Assert\File(
*     maxSize="1024M",
*     mimeTypes={"audio/mpeg", "audio/mp3"}
* )
* @Vich\UploadableField(mapping="episode_audio", fileNameProperty="audioName", size="audioSize")
*
* @var File $audioFile
*/
private $audioFile;

最后,在项目的php.ini文件中,我必须更改文件的上传最大大小

代码语言:javascript
复制
post_max_size = 1024M
upload_max_filesize = 1024M

我将把它留在这里供将来参考,以防其他人遇到同样的问题。

p.d特别感谢@Iaviku,他给了我添加这些字段的想法,最终解决了我的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55716201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档