VichUploader symfony 4 不上传图像

VichUploader symfony 4 not uploading image

我正在尝试使用 vichuploaderBundle 将图像上传到路径:{project}/public/img/circuits。

我遵循了他的 github 文档:https://github.com/dustin10/VichUploaderBundle/blob/master/docs/index.md

情况是: 我有一个带有 VichImageType 的表格,当我提交带有图像的表格时,我得到了这个:

thumbnailFile: Symfony\Component\HttpFoundation\File\UploadedFile {#91 ▼
    -test: false
    -originalName: "meme.jpg"
    -mimeType: "image/jpeg"
    -error: 0
    path: "/tmp"
    filename: "phpomKjXK"
    basename: "phpomKjXK"
    pathname: "/tmp/phpomKjXK"
    extension: ""
    realPath: "/tmp/phpomKjXK"
    aTime: 2020-11-26 16:22:10
    mTime: 2020-11-26 16:22:10
    cTime: 2020-11-26 16:22:10
    inode: 262126
    size: 79694
    perms: 0100600
    owner: 1000
    group: 1000
    type: "file"
    writable: true
    readable: true
    executable: false
    file: true
    dir: false
    link: false
  }

我使用这个映射 (vich_uploader.yaml):

vich_uploader:
    db_driver: orm

    mappings:
        circuits:
            uri_prefix: /img/circuits
            upload_destination: '%kernel.project_dir%/public/img/circuits'
            namer: Vich\UploaderBundle\Naming\SmartUniqueNamer


以下是与我实体中的图像相关的代码片段:

/**
 * @ORM\Entity(repositoryClass=CircuitRepository::class)
 * @Vich\Uploadable
 */
class Circuit
{
/**
     * @ORM\Column(type="string", length=255)
     */
    private $thumbnail;

    /**
     * @Vich\UploadableField(mapping="circuits", fileNameProperty="thumbnail")
     * @var File|null
     */
    private $thumbnailFile;
    /**
     * @var \DateTime
     */
    private $updated_at;

    public function getThumbnail(): ?string
    {
        return $this->thumbnail;
    }

    public function setThumbnail(string $thumbnail): self
    {
        $this->thumbnail = $thumbnail;

        return $this;
    }


    /**
     * @return File
     */
    public function getThumbnailFile(): ?File
    {
        return $this->thumbnailFile;
    }

    /**
     * @param File $thumbnailFile
     */
    public function setThumbnailFile(?File $thumbnailFile): self
    {
        $this->thumbnailFile = $thumbnailFile;
        if ($this->thumbnailFile instanceof UploadedFile)
            $this->updated_at = new \DateTime('now');
        return $this;
    }

}

最后是处理图像输入的表单部分:

->add('thumbnailFile', VichImageType::class, [
                'label' => 'Vignette',
                'allow_delete' => false,
                'download_uri' => false,
                'image_uri' => false,
                'required' => true,
            ])

有谁知道为什么我尝试上传的文件没有保存在我的 /public/img/circuits 文件夹中?

谢谢。

编辑:当我创建我的实体时,图像上传并保存得很好,但是有一次我尝试修改它并用另一个图像覆盖实体的现有图像,它从实体中删除它但它不上传新图像.

我找到了解决方法。

所以,这看起来很奇怪,但由于某些原因它起作用了。在处理表单提交时,我需要用它自己的 getter 手动设置缩略图(图像名称变量)的值。现在我可以用另一个图像覆盖图像。

$circuit->setThumbnail($circuit->getThumbnail());