VichUploaderBundle, file upload con doctrine

L’ upload di file è una delle necessità più comuni di un’applicazione web. La documentazione ufficiale copre l’argomento in maniera piuttosto chiara, trattando sia l’upload di file generico che quello di file legati ad un’entità doctrine. In particolare quest’ultimo è probabilmente il caso più comune dato che, nella maggioranza dei casi, vorrai avere su database un riferimento al file caricato.

La procedura descritta nel cookbook è assolutamente corretta, ma l’utilizzo del bundle VichUploaderBundle rende il tutto più efficace e risolve, abbastanza bene, anche un paio di problemi. Ecco la mia esperienza con questo bundle.

Quando mi sono trovato ad implementare il mio primo file upload sono partito, ovviamente, dalla documentazione. Seguendo il cookbook non ho avuto particolari problemi, ma qualcosa non mi ha convinto del tutto:

  1. La mia entità avrebbe dovuto conoscere dettagli legati all’upload (il percorso di upload) che, secondo me, non sono tanto di sua competenza
  2. Il codice per gestire l’upload, seppur semplice, era piuttosto verboso e ripeterlo per ogni entità legata ad un upload sarebbe stata operazione noiosa.

Ho sentito insomma la necessità di una soluzione migliore, più efficiente, per risolvere il problema. Cercando su KnpBundles ho trovato VichUploaderBundle.

Sostanzialmente il bundle si occupa di gestire il file  upload introducendo un set di annotazioni che permettono di definire il file come “Uploadabile” e di configurare quale proprietà dell’entità conterrà il file (e tutto il resto necessario a gestire l’upload). Il plugin si occupa anche di ascoltare gli eventi di doctrine per gestire caricamento e cancellazione dell’entità (e quindi in cascata dei file su file system). A completare l’opera alcuni helper per facilitare la vita nei template.

Tramite parametri di configurazione è inoltre possibile configurare destinazione dell’upload o, addirittura, il servizio utilizzato per la generazione del nome del file caricato.

Insomma un pacchetto veramente completo per la soluzione del problema upload.

L’installazione del bundle non presenta difficoltà e per i dettagli rimando alla documentazione ufficiale che è affidabile e completa.

Una delle cose che manca (almeno per il mio caso d’uso) è la possibilità di gestire l’upload su file system diversi da quello locale. Dato che spesso mi capita di lavorare con CDN questo è un punto debole. Fortunatamente il bundle sembra ben implementato e il salvataggio del file è delegato al componente:

Vich\UploaderBundle\Storage\FileSystemStorage

Che implementa l’interfaccia:

Vich\UploaderBundle\Storage\StorageInterface

Sono abbastanza sicuro che sia possibile integrare facilmente un (ad esempio) CDNStorage da poter usare in caso di upload su CDN. Questo ovviamente permetterebbe di legare l’upload di file a qualsiasi cosa, CDN e servizi di ogni tipo.

Non ho ancora avuto modo di verificare quanta fatica possa richiedere l’implementazione e l’integrazione di StorageInterface differenti ma spero di poterlo fare nei prossimi giorni.

In generale il bundle mi piace parecchio e penso che lo userò, da qui in avanti, per gestire i miei upload.

Mi piacerebbe anche leggere la tua opinione al riguardo, conosci qualche alternativa ? Hai già implementato qualcosa che potebbe essere integrato in questo bundle ?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>