2009-02-13 18 views
6

Ho un tag di input del file nella mia app web. Mi piacerebbe controllare che il file non sia troppo grande prima di inviarlo al server. Certo, ho ancora il lato server di validazione. C'è un modo per farlo con JavaScript? Deve funzionare in IE7 + e FF3 +. Grazie.Come recuperare la dimensione di un file prima di caricarlo?

MODIFICA: somefileinputobject.files [0] .filesize funziona in FF, ma non in IE.

+0

Sfortunatamente, questo è qualcosa che non è ancora multipiattaforma senza utilizzare plugin (ad esempio, flash). http://www.w3.org/TR/FileAPI/ sono le specifiche di lavoro supportate da Firefox. – Matthew

+0

Duplicato: http://stackoverflow.com/questions/158149/how-do-you-restrict-the-size-of-a-file-being-uploaded-with-javascript-or-java-w –

+0

Vedere [questo domande e risposte più recenti.] (http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation) Nei browser moderni questo è possibile senza una richiesta al server, anche se la validazione deve essere fatta su anche il server. – Pointy

risposta

2

E 'un problema difficile. Devi farlo con AJAX e utilizzare le intestazioni di file inviate dal browser al server sulla richiesta POST.

La libreria dell'interfaccia utente di Yahoo ha uno strumento per aiutare in questo. YUI Uploader

+0

Questa soluzione potrebbe funzionare per me se posso controllare le intestazioni di filesize usando jQuery/Javascript prima dell'invio di Ajax. È possibile, e se sì, come? Grazie. – TonE

+0

Ho paura che non lo sia. Penso che Flash abbia capacità per questo. Se puoi permetterti il ​​costo delle prestazioni di una richiesta di server di andata e ritorno, farei in modo che lo script memorizzi le informazioni dalle intestazioni su POST e poi le recuperi da JQuery in una chiamata separata. Credo che sia così che funziona lo strumento YUI. –

0

Javascript non può farlo. Avrebbe gravi problemi di sicurezza. Forse il flash può però.

+1

JS can. Vedi http://www.w3.org/TR/FileAPI/. Solo FF 3.6 lo supporta per ora (per quanto ne so). Non è insicuro, nel senso che l'utente deve selezionare il file. È meno sicuro, tuttavia, nel senso che non è più necessario premere un pulsante di invio. – Matthew

+0

Se qualcosa, questa affermazione è un'accusa di Flash. –

+0

non so nemmeno come sono arrivato qui ma .. oggi .. è possibile in tutti i principali browser; D – GottZ

0

Risposta breve: No, è necessario gestirlo sul server.

Risposta lunga: non affidabile. Con IE si potrebbe fare qualcosa di simile:

function checkSize(filespec) { 
var fso, f, s; 
fso = new ActiveXObject("Scripting.FileSystemObject"); 
f = fso.GetFile(filespec); 
s = f.size; 
// Do something with var s 
} 

ma questo può essere facilmente comprimised dalle impostazioni di sicurezza del browser o l'uso di un altro browser o piattaforma.

0

non può essere fatto in modo affidabile con JavaScript per tutti i browser, ma è possibile limitare la dimensione totale dei dati pubblicati dalla web.config

0

In realtà non si dispone di molte opzioni se si utilizza il controllo di input di file tradizionale. Non è possibile controllarlo dal lato client e questo raggiungerà il limite maxRequestLength configurato prima di avere l'opportunità di controllarlo dal lato server. È possibile rilevare l'eccezione che si verifica quando viene superata la maxRequestLength.

Problemi correlati