2008-10-01 3 views
11

Gibt es eine Möglichkeit, im clientseitigen Browser zu überprüfen, ob die Größe einer von einer JSP-Seite hochgeladenen Datei eine festgelegte Größenbeschränkung überschreitet, ohne dass der Benutzer die gesamte Datei hochladen muss, um festzustellen, ob sie zu groß ist?Wie schränken Sie die Größe einer Datei ein, die mit JavaScript (oder Java) hochgeladen wird, ohne die gesamte Datei zu übertragen?

Ich möchte, wenn möglich, von proprietären Kontrollen oder Techniken wie Flash oder ActiveX fern bleiben.

Danke!

Antwort

4

Dies ist keine perfekte Lösung, aber wenn Sie den Content-Length-HTTP-Header mit request.getHeader("Content-Length") überprüfen, dann können Sie wählen, nicht die gesamte Datei zu übertragen.

Zur Erklärung, eine extrem große Datei wird nicht auf einmal übertragen werden. Sie müssten tatsächlich einen Stream öffnen, der diesen Teil der POST-Daten darstellt und von diesem lesen, damit die gesamte Sache übertragen wird.

Wenn Sie sich dagegen Sorgen über Denial-of-Service-Angriffe machen, können Sie dem Content-Length-Header nicht wirklich vertrauen, da er leicht gefälscht werden kann. In diesem Fall sollten Sie ein Limit festlegen und eine Übertragung dieser Datei streamen, sobald Sie dieses Limit überschritten haben.

2

Schlagen Sie den Flash Entscheidung zu überdenken und einen Blick auf die YUI Uploader nehmen, hier:

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

Unter anderem wird sagen, das FILE Fall, dass Sie die Größe der ausgewählten Datei sofort in Bytes nachdem es ausgewählt wurde, aber bevor es hochgeladen wird, können Sie entsprechend einschränken.

1

Mit JSP oder PHP können Sie die Dateigröße nicht einschränken, da Ihre Seite die Anfrage erst erhält, wenn der Upload bereits erfolgt ist. An diesem Punkt können Sie entscheiden, die Datei nicht zu speichern, aber das könnte zu spät sein.

Es gibt einige Java-Lösungen, z. MyUploader oder Hermes. Einige unterstützen sogar das Hochladen mehrerer Dateien und das Fortsetzen von Teiluploads, und einige geben Ihnen auch den Quellcode. Sie können auch Ihre eigenen schreiben, aber es muss ein signiertes Applet sein, um zu funktionieren, da es auf das lokale Dateisystem zugreifen muss. Wenn Sie Apache als Webserver verwenden, benötigen Sie genügend RAM auf Ihrem Computer, um die gesamte Dateigröße im Speicher aller zu einem bestimmten Zeitpunkt hochgeladenen Dateien zu speichern.