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 .
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:
Sie müssen jedoch den Stream Byte für Byte 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!).
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.
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.
Dies funktioniert nicht für IE7 und darunter. Offensichtlich müssen Sie Ihrem Formular ein weiteres Attribut hinzufügen, das encoding="multipart / form-data"
istTags und Links java file-upload servlets