C'è un modo per “sbirciare” in un file mentre è il caricamento tramite HTTP su una scatola di Windows?

StackOverflow https://stackoverflow.com/questions/2479390

Domanda

Ho bisogno di aggiungere una funzione di upload di file a un sito Web ASP.NET e vorrei essere in grado di leggere una piccola porzione del file sul server mentre è ancora caricando. Una funzione peek o anteprima di tipo quindi in grado di determinare i contenuti e dare un feedback per l'utente, mentre è ancora caricando (stiamo parlando di file di grandi dimensioni qui). C'è un modo per fare questo? Sto pensando peggiore caso di scrivere un controllo personalizzato che carica solo un numero fisso di byte del file, una volta scelto e poi sotto le coperte inizia un altro upload del file completo. Non del tutto sicuro che anche questo è possibile, ma sto cercando una soluzione più elegante in ogni caso ... Grazie!

È stato utile?

Soluzione

Sembra che si vuole evitare il "schermo bianco della morte" durante il caricamento di file di grandi dimensioni. Se è così, si potrebbe voler esaminare controllo RadUpload di Telerik, che fornisce una barra di avanzamento durante il caricamento.

Se si desidera ripristinare il proprio, mi piacerebbe decompilare la loro copia di prova per le idee. Ho sbirciato alla fonte in questo modo, e compiono la barra di avanzamento attraverso una combinazione di un costume HttpModule e HttpHandler insieme al loro controllo. I percorsi gestore il file in modo streaming, mentre il modulo fornisce "percentuale di completamento" informazione - o viceversa; è stato un paio di anni da quando ho guardato.

Modifica

  

In realtà, io sto cercando di fare l'elaborazione lato server come è ancora caricato il file. Voglio importare i dati utente tramite HTTP, ma si vuole presentare all'utente di anteprima / opzioni su come faremo elaborare i loro dati, mentre il file è ancora uploading (definizioni di colonna, ecc). Non importa cosa, prendiamo il file come è, quindi il caricamento non ha bisogno di essere interrotto. Dato che io in realtà voglio interazione durante il caricamento basato sulla lettura di una parte relativamente piccola del file come si sia caricato, mi consiglia ancora lo stesso approccio?

Beh ... sarebbe molto difficile da fare, e potrebbe non funzionare cross-browser, ma potrebbe essere fatto con questo approccio.

Dal momento che è del tutto possibile lavorare con il file in entrata come un flusso come ho già detto, si potrebbe avere l'aggiornamento di elaborazione intial uno stato come parte di quel flusso di elaborazione. Se non si elabora come un flusso, si deve attendere per il caricamento di file completo prima di poter fare qualsiasi cosa con esso.

Il problema è questo: durante il caricamento di file, non si può avere alcuna interazione più basata su HTML. Il post deve continuare senza sosta o il caricamento avrà esito negativo. Il controllo che ho collegato funziona solo a tutti perché la maggior parte dei browser consente javascript per continuare a eseguire e aggiornare la pagina DOM durante il post.

Quindi, al fine di rendere questo lavoro, è necessario aggiornare alcuni standardizzato stato lato server durante il vostro elaborazione dei file nel HttpModule, che viene trasmesso al client tramite chiamate XmlHttpRequest gestite dal HttpHandler. Devi usare puro JavaScript / DOM per aggiornare l'interfaccia utente per l'utente.

Quindi, come ho detto, è complessa e rischia di essere buggy cross-browser, ma potrebbe teoricamente essere fatto.

Ci sono alernatives che potrebbero essere più stabile, ma potrebbe non necessariamente essere fattibile: si potrebbe costruire un controllo ActiveX o un Click-Once applicazioni .NET che i pre-elabora il file prima di caricare, e forse anche in modo asincrono trasferisce il file mentre l'utente continua la navigazione. Alcuni utenti potrebbero non piace che l'opzione, e non so i particolari del vostro scenario di distribuzione, ma è un'opzione.

Altri suggerimenti

C'è un metodo HTTP HEAD ma non PEEK.

HEAD vi darà informazioni e le intestazioni relative al file.

Naturalmente è possibile fare un gestore speciale richiesta che fa tutto quello che vuoi. Non è necessario lavorare con risorse statiche, è possibile creare in modo dinamico qualsiasi risposta desiderata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top