Come limitare la dimensione di un file che viene caricato con JavaScript (o Java) senza trasferire l'intero file?

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

Domanda

Esiste un modo per convalidare sul browser lato client se la dimensione di un file che viene caricato da una pagina JSP supera un limite di dimensioni impostato senza forzare l'utente a caricare l'intero file solo per scoprire che era troppo grande?

Vorrei stare lontano da qualsiasi controllo proprietario o tecnica come Flash o ActiveX se possibile.

Grazie!

È stato utile?

Soluzione

Questa non è una soluzione perfetta, ma se controlli l'intestazione HTTP Content-Length con request.getHeader (" Content-Length ") , puoi scegliere di non trasferire l'intero file .

A titolo di spiegazione, un file estremamente grande non verrà trasferito tutto in una volta. Dovresti effettivamente aprire uno stream che rappresenta quel blocco di dati POST e leggere da esso per il trasferimento dell'intera cosa.

D'altra parte, se sei preoccupato per gli attacchi denial-of-service, non puoi davvero fidarti dell'intestazione Content-Length, perché può essere facilmente falsificata. In questo caso, dovresti impostare un limite e trasmettere in streaming un trasferimento di questo file, interrompendolo non appena hai superato tale limite.

Altri suggerimenti

Suggerisci di riconsiderare la decisione Flash e dai un'occhiata a YUI Uploader, qui:

http://developer.yahoo.com/yui/uploader/

Tra l'altro, l'evento fileSelect ti dirà la dimensione del file selezionato in byte immediatamente dopo la sua selezione ma prima che sia caricato, quindi sarai in grado di limitare di conseguenza.

Con JSP o PHP non sarai in grado di limitare le dimensioni del file perché la tua pagina non riceverà la richiesta fino a quando il caricamento non è già avvenuto. A quel punto puoi decidere di non salvare il file ma potrebbe essere troppo tardi.

Esistono alcune soluzioni Java là fuori, ad es. MyUploader o Hermes . Alcuni addirittura supportano caricamenti multipli di file e riprendono caricamenti parziali, e altri ti danno anche il codice sorgente. Puoi anche scrivere il tuo, ma dovrà essere un'applet firmata per funzionare perché deve accedere al filesystem locale. Se stai utilizzando Apache come server web, avrai bisogno di RAM sufficiente nel tuo computer per adattarsi all'intera dimensione del file in memoria di tutti i file caricati in un determinato momento.

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