1. Das Prinzip des Datei -Uploads
1. Voraussetzungen für das Datei -Upload:
A. Die Methode der Formularform muss post sein
B. Der EncTPe des Formulars muss mehrteilig/formdaten sein (es bestimmt die Postanforderungsmethode und den Datentyp der Anforderungskörper)
C. Der in Formular bereitgestellte Eingabetyp ist die Dateitypdatei -Upload -Domäne.
2. Verwenden Sie Komponenten von Drittanbietern, um das Datei-Upload zu erreichen
1. Commons-fileUpload-Komponente:
Jar: Commons-fileUpload.jar
commons-io.jar
2. Kernklasse oder Schnittstelle
DiskFileItemfactory: Stellen Sie die Umgebung fest
öffentliche void setSizethreshold (int Sizethreshold): Stellen Sie die Puffergröße fest. Der Standard ist 10 KB.
Wenn die hochgeladene Datei die Puffergröße überschreitet
Public void setRepository (java.io.file repository): Legen Sie das Verzeichnis fest, in dem temporäre Dateien gespeichert werden. Standardmäßig das temporäre Dateispeicherverzeichnis des Systems.
ServletFileUpload: Core Upload -Klasse (Hauptfunktion: Analysieren Sie den Körperinhalt der Anforderung)
boolean ismultiPartContent (httpServletRequest? Anfrage): Bestimmt, ob das EngTYPE des Benutzers Formular aus mehrteiligem/Form-Daten ist.
Listen Sie ParSerequest auf (HTTPServletRequest -Anfrage): Analysieren Sie den Inhalt in der Anforderungsbehörde
setFilesizemax (4*1024*1024); // Legen Sie die Größe einer einzelnen hochgeladenen Datei fest
hochladen.setsizemax (6*1024*1024); // Setzen Sie die Gesamtdateigröße
FileItem: Repräsentiert ein Eingabefeld im Formular.
boolean isformfield (): Ist es ein normales Feld?
String GetFieldName: Holen Sie sich den Feldnamen des normalen Feldes
String getString (): den Wert eines normalen Feldes erhalten
InputStream getInputStream (): Erhalten Sie den Eingangsstrom hochgeladener Felder
String GetName (): Holen Sie sich den Namen der hochgeladenen Datei
Beispiel: Erstellen Sie zunächst einen Dateiordner im Web-inf-Verzeichnis, dh alle Dateien müssen hier hochgeladen werden, um den direkten Zugriff durch andere zu vermeiden.
1. Holen Sie sich den wirklichen Weg der Dateien
String storePath = getServletContext (). GetRealPath ("/web-inf/files");
2. Richten Sie die Umgebung ein
DiskFileItemfactory factory = new diskfileItemfactory (); // Wo ist der Standard -Cache und den temporären Dateispeicherplatz
3. Schiedsnotierungsmethode
boolean ismultiPart = servletFileUpload.ismultipartContent (Anfrage); if (! ismultiPart) {System.out.println ("Upload -Methode falsch!"); zurückkehren; }4. Datei -Upload -Kernklasse hochladen
ServletFileUpload upload = new ServletFileUpload (fabrik); 5. Analyze // analysieren Sie die Liste <DileItem> items = upload.ParSerequest (Anfrage); für (FileItem item: items) {if (isformfield ()) {// Normales Feld, String -Feldname, eingereicht vom Formular = item.getFieldName (); // Feldname des Formularinformationszeichenfolge fieldValue = item.getString (); // Forminformationsfeldwert system.out.println (fieldname+"="+fieldValue); } else // Dateiverarbeitung {inputStream in = item.getInputStream (); // Dateiname hochladen c: /users/administrator/desktop/a.txt string name = item.getName (); // brauche nur a.txt string mateiname = name.substring (name.lastIndexof ("//")+1); // Erstellen Sie das Ausgabestream String StoreFile = StorePath+"//"+Dateiname; // Laden Sie die Speichernadresse der Datei aus. Byte [] B = neues Byte [1024]; int len = -1; while ((len = in.read (b))! =-1) {out.write (b, 0, len); } in.close (); // schließen den Stream out.close (); }}Schreiben Sie ein Formular
<%@ page Language = "java" import = "java.util. "-// w3c // dtd html 4.01 transitional // en"> <html> <kopf> <base href = "<%= Basepath%>"> <titels> my jsp '1.jsp' Startseite </title> <meta http-äquiv = "pragma" content = "no-cache"> <meta http-äquiv = "cache" cache " content = "no-cache"> <meta http-äquiv = "expires" content = "0"> <meta http-äquiv = "keywords" content = "keyword1, keyword2, keyword3"> <meta http-äquiv href="styles.css"> --> </head> <body> <form action="${pageContext.request.contextPath}/servlet/UploadServlet2" method="post" enctype="multipart/form-data"> Username<input type="text" name="username"/> <br/> <input type="file" name = "f1"/> <br/> <Eingabe type = "Datei" name = "f2"/> <br/> <Eingabe type = "subine" value = "speichern"/> </form> </body> </html>Schreiben Sie ein Einreichungs -Servlet: UploadServlet2
Paket com.liuzhen.Upload; import Java.io.FileOutputStream; Import Java.io.ioException; Import Java.io.inputStream; Import Java.io.outputStream; importieren java.util.list; javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpservletResponse; import org.apache.commons.FileUpload.FileItem; importieren org.apache.commons.fileupload.FileUploadexception; org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;//Introduction to file upload public class UploadServlet2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServleTException, iOException {// Setzen Sie die Codierungsanforderung. Antwort.SetContentType ("text/html; charSet = utf-8"); Versuchen Sie {// laden Sie die Datei String Storepath = getServletContext () hoch, GetRealPath ("/webinf/file"); // Setzen Sie die Umwelt diskFileItemFactory factory = new diskFileItemFactory (); // Formularübertragungsmethode form forcTtpe = multiPart/form-data boolean ismultiPart = servletFileUpload.ismultiPartContent (Anfrage); if (! ismultiPart) {System.out.println ("Upload -Methode ist falsch!"); zurückkehren; } ServletFileUpload upload = new ServletFileUpload (factory); // analyse list <FileItem> items = upload.parsequest (Anfrage); für (FileItem item: items) {if (isformfield ()) {// Normales Feld, String -Feldname, eingereicht vom Formular = item.getFieldName (); // Feldname des Formularinformationszeichenfolge fieldValue = item.getString (); // Forminformationsfeldwert system.out.println (fieldname+"="+fieldValue); } else // Dateiverarbeitung {inputStream in = item.getInputStream (); // Dateiname hochladen c: /users/administrator/desktop/a.txt string name = item.getName (); // brauche nur a.txt string mateiname = name.substring (name.lastIndexof ("//")+1); // Erstellen Sie das Ausgabestream String StoreFile = StorePath+"//"+Dateiname; // Laden Sie die Speichernadresse der Datei aus. Byte [] B = neues Byte [1024]; int len = -1; while ((len = in.read (b))! =-1) {out.write (b, 0, len); } in.close (); // schließen den Stream out.close (); }}} catch (FileUploadexception e) {neue runTimeException (e) werfen; }} public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, IOException {dodget (request, response); }}Die hochgeladene Datei befindet sich in der Tomcat -Anwendung.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.