簡體   English   中英

Symfony 2處理文件上傳

[英]Symfony 2 handling file uploads

對於有關處理文件上傳的問題,我找不到直接的答案。 一般而言:上載文件(包括良好實踐)的最佳“ symfony”方法是什么?

在我的研究/懷疑之下:

根據docs: 處理文件上載 ,看起來我可以立即在我的實體中擁有uploadFile對象並進行管理。 問題是我不覺得實體與該上傳有任何關系,並且似乎並沒有處理它的好地方。 即我想將圖像文件保存在不同的文件夾中(根據上傳日期),我不喜歡檢查/創建實體內部的文件夾和路徑的想法。 好的方面是,我可以訪問生命周期回調以上傳/刪除文件。

經過更多研究之后,我發現了這個主題: Symfony 2-Amazon S3 Idea 上載圖像的最佳實踐是創建一個用於文件上傳的自定義處理程序。 我喜歡這一點,特別是因為在我的示例中,我想使用額外的服務來調整上傳圖像的大小,並且可以輕松地將它們注入處理程序。 我的問題是:該主題已有2年歷史了,所以也許在目前的symfony中,這種解決方案不再“可行”了嗎?

最后一個問題:就symfony的良好實踐而言,哪種方法更好? 我想念什么嗎? 我希望這個問題不要太籠統。

TLDR :在symfony2的實際版本中處理上載文件的最佳方法是什么?將實體作為上載的文件掛起,或將該邏輯移至某些自定義處理程序/服務?

實際上,我發現在實體上管理可上傳字段的最好方法是使用VichUploaderBundle 如果您打算使用s3或類似的服務, 可以很容易地配置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;
}

我開始將OneupUploaderBundle與jQuery File Uploader一起使用。 我需要同時上傳多張圖片,並且由於您提到了圖片,因此這可能適合您。 在OneupUploaderBundle EventListener中,您可以在文件上傳后立即添加自定義邏輯,包括將圖像移動到所需的任何文件夾,調整大小以及添加其他過濾器。 我設置了一種自動調整大小並創建縮略圖的方法,而我的實體僅存儲文件信息和位置。 檢查這些,看看是否與您需要的更好。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM