Datei-Servlet für mehrere Teile hochladen [duplizieren]

7

Wie kann ich Dateien hochladen und andere Parameter eines Formulars abrufen? Ich möchte mehrteilige Anfragen in Java-Servlet behandeln.

    
bhard 04.02.2010, 06:02
quelle

5 Antworten

11

Um eine Datei zum Hochladen zu durchsuchen und auszuwählen, benötigen Sie ein <input type="file"> -Feld im Formular. Wie in der HTML-Spezifikation angegeben, müssen Sie die Methode POST verwenden und Das Attribut enctype des Formulars muss auf multipart/form-data festgelegt werden .

%Vor%

Nach dem Absenden eines solchen Formulars stehen die Formulardaten im mehrteiligen Format in HttpServletRequest#getInputStream() zur Verfügung. Zum Testen (!) Können Sie den Stream mit dem folgenden Code-Schnipsel lesen:

%Vor%

Sie müssen jedoch den Stream Byte für Byte (statt char by char). Vor der neuen neuen Servlet 3.0 API hat die Standard-Servlet-API nicht funktioniert Es gibt keine eingebauten Einrichtungen, um sie zu parsen. Die normalen Formularfelder sind auch nicht wie üblich mit request.getParameter() way verfügbar, sie sind im mehrteiligen Formulardatenstrom enthalten.

Wenn Sie noch nicht auf Servlet 3.0 sind (was nur etwas weniger als 2 Monate alt ist), müssen Sie den Stream selbst analysieren. Das Parsen eines solchen Streams erfordert genaues Hintergrundwissen darüber, wie Multipart-Formular-Datenanforderungen spezifiziert und strukturiert sind. Um einen perfekten mehrteiligen Parser zu erstellen, müssen Sie viel Code schreiben. Aber glücklicherweise gibt es den Apache Commons FileUpload , der sich seit Jahren als robust erwiesen hat. Lesen Sie sorgfältig das Benutzerhandbuch und Frequently Asked Questions , um Codebeispiele zu finden und zu lernen, wie man sie optimal nutzt (MSIE in Betracht ziehen!).

    
BalusC 04.02.2010 11:33
quelle
5

Schritt 1

Lesen Sie den Beitrag von adatapost.

Schritt 2

Sehen Sie sich das Projekt Apache Commons FileUpload an.

Es gibt eine ähnlich praktikable Lösung von O'Reily, aber ihre Nutzungslizenz erfordert, dass Sie ein Buch kaufen, und selbst diese Anforderung ist so schlecht artikuliert, dass ich sie nicht mit einem weiteren Link nutzen kann.

    
Justin Searls 04.02.2010 06:07
quelle
2

Schritt-1

set enctype Formular-Tag-Attribut.

%Vor%

Schritt-2

Lesen Sie Justins Beitrag.

    
adatapost 04.02.2010 06:12
quelle
1

Um enctype="multipart / form-data" zu verarbeiten, können wir request.getParameter () nicht direkt verwenden

Nun, um das Problem zu lösen

Zum Hochladen einer Datei auf den Server gibt es verschiedene Möglichkeiten. Aber ich werde die von oreilly zur Verfügung gestellte MultipartRequest-Klasse verwenden. Um diese Klasse verwenden zu können, benötigen Sie die Datei cos.jar .

%Vor%

Dies wird Ihre Datei nach d: / new hochladen

Jetzt Parameter der mehrteiligen Anfrage abrufen Sie müssen FilenameUtils class und getOriginalFileName() method von MultipartRequest class verwenden.

%Vor%     
Himanshu Vinchhi 01.04.2014 11:34
quelle
0

Dies funktioniert nicht für IE7 und darunter. Offensichtlich müssen Sie Ihrem Formular ein weiteres Attribut hinzufügen, das encoding="multipart / form-data"

ist     
user2384271 15.05.2013 04:17
quelle

Tags und Links