2009-05-06 16 views
8

Mi piacerebbe visualizzare la dimensione del file che è stato scelto tramite il pulsante Sfoglia del controllo FileUpload.asp.net FileUpload evento dopo la scelta è fatto e prima di inviare per il caricamento

Idealmente, questo valore viene visualizzata immediatamente dopo l'utente sceglie il file, ma prima della "Carica file" pulsante viene premuto.

Ho e su un modulo web. Il pulsante appare così:

<asp:Button ID="UploadButton" runat="server" onclick="UploadButton_Click" Text="Upload File"/>   

L'evento onclick per i risultati del controllo pulsante in un postback e il file è stato caricato.

so come ottenere la dimensione del file, ma non prima che il pulsante Carica file si fa clic e si verifica un postback.

C'è un evento associato al controllo Web FileUpload che potrebbe inviare il modulo (cioè postback) senza il clic del pulsante?

L'intento è che voglio dare all'utente la sensazione di quanto tempo il caricamento potrebbe richiedere ... impostare un aspetto diverso per un file 10mb rispetto a un file 2kb, ecc.).

risposta

14

Il problema è che non c'è modo di scoprire la dimensione del file sul lato client, senza postback. Potresti usare Ajax, ma ciò significherebbe comunque caricare il file prima.

Questo può essere fatto solo utilizzando un controllo di tipo ActiveX ActiveX. Consiglierei di utilizzare qualcosa come lo Silverlight FileUploader perché ottiene la dimensione del file prima di postarla e ha anche un bel indicatore di avanzamento.

UPDATE: Se si desidera attivare un postback o una richiesta Ajax dopo che l'utente fa clic su Sfoglia, l'evento lato client è "onchange". Ecco un esempio di come utilizzare l'evento onchange.

<asp:FileUpload runat="server" 
    onchange="alert('you selected the file: '+ this.value)" /> 

Si potrebbe avere l'onchange, attivare un ajax per caricare il file e poi aggiornare un'etichetta che mostra la dimensione del file. Il problema con questo è che se è un file di grandi dimensioni, sconfigge lo scopo di far sapere in anticipo all'utente che ci vorrà molto tempo.

Ecco un altro consiglio: C'è un plugin jQuery che utilizza il flash per determinare la dimensione del file prima del caricamento ed è molto facile da usare. Check it out a jQuery Uploadify

+1

mi chiedevo se ci sarebbe stato un evento associato al FileUpload "processo di scelta" (cioè facendo clic su "Sfoglia" e fare una selezione che popola la parte di testo del controllo FileUpload. Allora forse tale un evento potrebbe inviare il modulo una prima volta utilizzando Javascript.Un secondo invio si verificherebbe quando il pulsante Upload è stato cliccato.Sapevi di un evento del genere e in caso affermativo, avrebbe accesso alla proprietà FileUpload1.PostedFile.ContentLength? –

+0

Grazie per queste buone idee Ho già esaminato il controllo Silverlight In Visual Studio 2005, non esiste un evento onchange per . Non ho controllato se VS2008 lo supporta –

+1

Vedo cosa intendi .. ignorare la mancanza di questo nel modello intellisense/oggetto del controllo. Ecco l'HTML generato:

Problemi correlati