首页 > 解决方案 > VichUploaderBundle 和 Symfony:从 JPG 获取 exif

问题描述

我正在使用 Symfony 5 和出色的 VichUploaderBundle 来上传图片。我正在尝试从 jpeg 文件中获取 exif 信息。我使用函数 exif_read_data 并且没关系(我的测试正在运行)。

现在我想知道将 exif 信息保存在我的实体中的最佳方式是什么时候?

我有一个带有传统 ImageFile、文件名、...的实体“图片”

我对此很陌生,我不知道该怎么做。

我向我的实体添加了一个 exif 字段和 setExif,以尝试将其保存为实体持续存在但它不起作用的时间。在创建实体后调用一个监听器然后让另一个持久化来保存 exif 信息会更好吗?或者可以通过添加 Exif 选项来修改 UploadableField(我们已经有了大小、原始文件名……),但我认为这显然不是最好的。

现在我有这个(当我上传我的图片时)但它不工作:

我的图片实体如下所示:

  /**
     * @ORM\Column(type="array", nullable=true)
     */
    private $exif_file = [];

    public function setImageFile(?File $imageFile = null): void
    {
        $this->imageFile = $imageFile;

        if (null !== $imageFile) {
            $this->updated_at = new \DateTimeImmutable("now",new \DateTimeZone('Europe/Paris'));
        }
    }

    public function setExifFile(?array $exif_file): self
    {
        $this->exif_file = $exif_file;
        return $this;
    }

我的表单在另一个实体 (A) 中,我的上传定义如下:

->add('pictureFiles', FileType::class,[
                'required'=>false,
                'multiple'=>true,
            ])

该 A 实体具有:

public function setPictureFiles($pictureFiles): self
    {
        foreach ($pictureFiles as $pictureFile) {

            $picture = new Picture();
            $picture->setImageFile($pictureFile);

           $path = 'http://mywebsite'.$this->helper->asset($picture->getImageFile(), 'imageFile');

            $exif_file = exif_read_data($path,null,true)['FILE'];

            $picture->setExifFile($exif_file);

            $this->addPicture($picture);
        }
        $this->pictureFiles = $pictureFiles;
        return $this;
    }

问题是我无法成功获取文件路径。

我尝试了不同的方法,但没有成功。

创建实体时,它通过以下方式工作:$this->helper->asset($picture, 'imageFile');

非常感谢您的帮助!

标签: symfonyexifvichuploaderbundle

解决方案


推荐阅读