Symfony 2处理文件上传

时间:2014-05-07 21:34:51

标签: php symfony file-upload

我无法直接回答有关处理文件上传的问题。 总的来说:什么是最好的" symfony"上传文件的方式,包括良好做法?

在我的研究/怀疑之下:

根据文档:handling file uploads,看起来我可以在我的实体中开箱即用uploadFile对象并进行管理。问题是我不觉得实体与上传有关,它似乎是处理它的好地方。即我想将我的图像文件保存在不同的文件夹中(根据上传日期),我不喜欢在实体内部检查/创建文件夹和路径的想法。 好的一面是我可以访问生命周期回调来上传/删除文件。

经过更多研究,我发现了这个话题: Symfony 2 - Best practice to upload an image on Amazon S3 该主题的想法是为文件上传创建自定义处理程序。我喜欢这样,特别是因为在我的例子中我想使用额外的服务来调整上传的图像大小,我可以轻松地将它们注入处理程序。 我的问题是:这个话题已经有2年了,所以也许在目前的symfony中,那种解决方案不是可行的"了吗?

最后一个问题:在symfony的良好实践方面,哪种方法更好?我错过了什么吗? 我希望这个问题不是太笼统。

TLDR :在actm版本的symfony2中处理上传文件的最佳方法是什么 - 在实体中挂起文件作为uploadedFile,或者将该逻辑移动到某个自定义处理程序/服务?

2 个答案:

答案 0 :(得分:2)

实际上,我发现在我的实体上管理可上传字段的最好方法是使用VichUploaderBundle。如果您打算使用s3或类似服务,则配置和play nice with Gaufrette都很容易。

以下是使用捆绑包的快速示例:

配置文件:

vich_uploader:
    db_driver: orm
    mappings:
        product_image:
            uri_prefix: images/products
            upload_destination: %kernel.root_dir%/../web/images/products
            namer: vich_uploader.namer_origname
            delete_on_remove: true

您的实体:

use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * @Vich\Uploadable
 */
class Product
{
    /**
     * @Assert\File(
     *     maxSize="5M",
     *     mimeTypes={"image/png", "image/jpeg", "image/pjpeg"}
     * )
     * @Vich\UploadableField(mapping="product_image", fileNameProperty="image")
     */
    protected $file;

    /**
     * @ORM\Column(type="string", length=255, name="image", nullable=true)
     */
    protected $image;
}

答案 1 :(得分:2)

我开始使用OneupUploaderBundle和jQuery File Uploader。我需要同时上传多张图片,因为您提到的图片可能对您有用。在OneupUploaderBundle EventListener中,您可以在文件上传后立即添加自定义逻辑,包括将图像移动到所需的任何文件夹,调整大小和添加其他过滤器。我设置了一个自动调整大小并创建缩略图图像的方法,我的实体只存储文件信息和位置。检查这些,看看它是否符合您的需求。

https://github.com/1up-lab/OneupUploaderBundle

http://blueimp.github.io/jQuery-File-Upload/