Upload di file di grosse dimensioni

giovedì, 31 gennaio 2008 15.08 by Marco Bellinaso

La funzionalità di upload di file è richiesta in gran parte delle applicazioni web. Se i file da ricevere sono nell'ordine di qualche KB non ci sono grandi problemi, e il controllo FileUpload di ASP.NET (oppure il relativo <input type="file" ... /> di HTML, con l'invio diretto tramite la richiesta POST sul server) va benissimo. Spesso però è necessario poter gestire upload di grosse dimensioni: PDF particolarmente lunghi o più probabilmente immagini, video, o file di dati. In questi casi le cose si complicano, perchè bisogna trovare un modo per dare un feedback all'utente ed evitare che questo resti in attesa per 10 minuti con una pagina bianca mentre il file viene spedito sul server -- cosa che comunque *non* avverrebbe mai...l'utente si chiederebbe se qualcosa è andato storto, premendo Refresh (con ovvi problemi di invio duplicato) o premendo Stop e riprovando da capo. Implementare a mano tutto il meccanismo è cosa piuttosto complessa, e nel 99% dei casi non ne vale la pena visto che si trovano in giro varie soluzioni già pronte all'uso. Io ne ho provate davvero parecchie, ma qui vi segnalo solo quelle che mi sono sembrate le migliori:

  • RADActive I-Load: me lo ha fatto scoprire Alberto tramite questo post, e si è rivelato così buono che dopo qualche test ho subito comprato la versione Enterprise. E' un wizard di upload pensato specificatamente (ed esclusivamente) per le immagini: permette non solo di farne l'upload (mostrando ovviamente la barra di progressione, un'indicazione sui byte caricati e mancanti, e una stima dei tempi), ma anche di ridimensionarle in vari formati, farne il crop, selezionare delle regioni con specifiche proporzioni, zoomare, mostrare delle thumbnail, e altro ancora. Io lo uso in Pet-files, per consentire agli utenti di caricare le foto dei propri animali e per fargliene selezionare una regione quadrata che poi uso per mostrare delle miniature con la stessa dimensione, facilmente disponibili in una griglia dalle dimensioni prevedibili. Se avete bisogno di caricare sul server solo immagini, questa è decisamente la soluzione che fa per voi. L'unica nota negativa riguarda l'impossibilità di localizzare gran parte della UI del wizard (a parte un paio di label), ma la mancanza verrà colmata con la prossima versione già annunciata (che aggiungerà anche altre manipolazioni alle immagini). Al momento il controllo non sembra funzionare quando il locale della pagina è impostato il cinese, ma mi aspetto che anche questo venga risolto quando aggiungeranno il supporto per la localizzazione.
  • Telerik RadUpload: a differenza di I-Load, questo controllo permette di caricare file di qualsiasi tipo, non solo immagini, e potrebbe quindi essere preferibile nel caso vogliate acquistare un singolo componente che vada bene in tutte le situazioni (ma perdete però tutte le feature specifiche per le immagine, che nel mio caso ad esempio erano un must). Il feedback viene mostrato in un pannello aggiornato tramite AJAX, e il look & feel del pannello è ovviamente personalizzabile tramite CSS. Anche le informazioni mostrate sono in parte personalizzabili tramite template. Sul sito del produttore trovate una serie molto complete di esempi che mostrano live tutte le feature.

I due controlli descritti sono specifici per ASP.NET, ma oggi leggendo il blog di Jon Galloway ho trovato un componente che può essere usato con qualsiasi tecnologia (ASP.NET, ASP, PHP, JSP, RoR ecc.). Si chiama SWFUpload e, come suggerisce il nome stesso, si tratta di un componente Flash. SWFUpload ha vari parametri che permettono di specificare la dimensione massima dell'upload, personalizzare l'aspetto, specificare funzioni JavaScript di callback per alcuni eventi (file selezionato, upload iniziato, upload in corso, upoload terminato), e filtrare i tipi di file mostrati nella dialog di selezione (una cosa che non si può invece fare usando il controllo HTML standard, comunque usato come base per tutti i controlli basati solo su HTML + JavaScript). Quest'ultima caratteristica e la possibilità di validare la dimensione del file *prima* di spedirlo sul server potrebbero da sole essere dei buoni motivi per scegliere questo componente. Ma, cosa sempre apprezzabile, il componente è anche gratuito al 100%!

Sebbene la parte client-side sia sviluppata in Flash+JavaScript, serve comunque del codice server-side che gestisca il ricevimento del file, salvandolo da qualche parte, elaborandolo ecc. Sempre dal sito dell'autore potete scaricare una demo completa per ASP.NET, che mostra come caricare immagini JPEG e mostrarne le miniature.  

Correntemente valutato 3.0 da 3 utenti

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Segnala:  
Tags:   , , ,
Categorie:   Sviluppo software
Azioni:   E-mail | Permalink | Commenti (2) | RSS CommentiRSS comment feed

Post correlati

Commenti

febbraio 16. 2008 02.20

Gian Paolo

Ciao Marco che mi dici a diguardo dei file che eccedono la dimensione massima configurata dal parametro maxRequestLength nel web config? (che per default dovrebbe essere impostata a 4mb se onn erro)
Io ho ancora il problema appeso! Se provo a gestire l'eccezione tramite global.asax nell'evento Application_Error riesco ad intercettare l'errore ma non sono riuscito a non fare in modo che al client venga mostrato un bruttissimo errore di pagina non trovata..

Gian Paolo

aprile 30. 2008 18.02

riccardo

Ottimo direi, anzi eccellente!

Ha un problema!:

Non si capisce come fare per definire la directori ove collocare i files!

E direi che senza ciò non serve ad un bel c. Niente!

Riccardo

riccardo

Aggiungi commento


(Visualizza la tua icona Gravatar)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Anteprima

novembre 20. 2008 09.45