1. Analyse des Prinzips des Datei -Uploads
1. Die notwendigen Voraussetzungen für das Datei -Upload
A. Die Methode des Formulars muss post sein
B. Die EngeTpe-Eigenschaft des Formulars muss vom Typ Multipart/Form-Data sein.
EngeTPE-Standardwert: Anwendung/x-www-form-urlencoded
Funktion: Sagen Sie den Server zum MIME -Typ des Anforderungstextes
Anwendung/X-WWW-Form-Urlencoded: Benutzername = ABC & Passwort = 123
ServletRequest.getParameter (String -Name); Diese Methode ist eine Methode, die diesen Typ spezifisch liest
Mehrfach-/Formdaten:
2. Verwenden Sie die Commons-FileUpload-Komponente, um Dateien hochzuladen
A. Kopieren Sie das JAR-Paket: Commons-fileUpload.jar commons-io.jar
B. Implementierungsprinzip
3. Problem des Müllcodes
A. Müllcode gewöhnlicher Felder
FileItem.getString (String charSet); Die Codierung sollte mit dem Kunden übereinstimmen
B. Der hochgeladene chinesische Dateiname ist verstümmelt.
request.setcharactercoding ("utf-8"); Die Codierung muss mit dem Kunden übereinstimmen
16. Spezifische Implementierung
Der Code für die Rezeption upload.jsp ist wie folgt
<%@ page Language = "java" import = "java.util. content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form action = "$ {pageContext.request.contextPath}/Servlet/UploadServlet3" methode = "post" engType = "MultiPart/Form-Data"> Name: <input name = "name"/> <br/> file1: <input type type = "value =" upload "> </form> </body> </html>Hintergrund Servlet Code
Paket com.itheima.servlet; import java.io.file; import Java.io.ioException; import Java.io.printwriter; import Java.io.usupportendenCodingException; Import Java.util.List; Import Java.util.uuid; Import Javax.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet - javax.servlet.http.httpServlet; import javax.servlet.http.httpletRequest; import Javax.servlet.http.httpserVletRespect; org.apache.commons.FileUpload.FileUploadexception; import org.apache.commons.FileUpload.disk.diskFileMfactory; UploadServlet3 erweitert HttpServlet {public void dodget (httpServletRequest-Anforderung, HttpServletResponse-Antwort), die ServletException, IOException {request.setcharactercoding ("utf-8"); Antwort. response.getWriter (); System.out.print (request.getRemoteaddr ()); boolean ismultiPart = servletFileUpload.ismultipartContent (Anfrage); if (! ismultipart) {Wurf New RunTimeexception ("Bitte überprüfen Sie die EngeType-Eigenschaft, um zu bestätigen, dass es sich um eine Multipart-Multipart handelt. DiskFileItemfactory (); ServletFileUpload parser = new ServletFileUpload (dfif); // parser.setFilesimax (3*1024*1024); // Setzen Sie die Größe einer einzelnen Datei -Upload // Parser.setsizemax (6*1024). {items = parser.parsequest (request);} catch (FileUploadbase.FileSizElimitexceedException e) {out.write ("UploadFile überschreitet 3M"); return;} catch (FileUploadbase.sizelimitexceedException E) {Out.Wr. e) {e.printstacktrace (); Neue RunTimeException werfen ("Analyse hochladen Inhalte fehlgeschlagen, bitte versuchen Sie es erneut");} // Verarbeiten Sie den angeforderten Inhalt if (Elemente! = NULL) {für (FileItem -Element: Elemente) {if (item.isformfield ()) {processFormfield (item);} else {processUploadfield (itemfield);}}}}} out. processUploadfield (FileItem item) {try {String fileName = item.getName (); // if (Dateiname! FilenameUtils.getExtension(fileName);//MIME type String contentType = item.getContentType();if(contentType.startsWith("image/")){//Date now = new Date();// DateFormat df = new SimpleDateFormat("yyyy-MM-dd");// // String childDirectory = df.format(now);// Berechnen Sie das Speicherverzeichnis gemäß dem HashCode des Dateinamens String ChildDirectory = MakechildDirectory (getServletContext (). Datei (gespeicherter Anpassungen); if (! Storedirectory.exists ()) {Storedirectory.mkdirs ();} System.out.println (Dateiname); ITE (neue Datei (gespeicherte Datei speicherte Datei+Datei. Berechnen Sie das gespeicherte Subdirektory Private String MakeChildDirectory (String RealPath, String FileName) {int HashCode = Dateiname = neue Datei (RealPath, Verzeichnis); if (! file.exists ()) Datei.mkdirs (); Rückgabeverzeichnis;} private void processFormField (FileItem item) {String fieldname = item.getFieldName (); // Field Name String Fieldvalue; try {fieldValue = item.getString ("utf-8"); RuntimeException("UTF-8 encoding is not supported");}System.out.println(fieldName+"="+fieldValue);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}5. In Bezug auf temporäre Dokumente
A. DiskFileItemFactory
Public void setRepository (Dateirepository): Setzen Sie das Verzeichnis, in dem temporäre Dateien gespeichert sind
B.
Verwenden Sie beim Hochladen von Dateien IO -Stream, um sie selbst zu verarbeiten. Stellen Sie sicher, dass Sie die temporäre Datei nach Abschluss des Streams löschen. FileItem.delete ()
Es wird empfohlen,: FileItem.Writer (Datei F) zu verwenden. Die temporären Dateien werden automatisch gelöscht.
6. Begrenzen Sie die Dateigröße
A.
ServletFileUpload.setFilesimemax (3*1024*1024); // Legen Sie die Größe eines einzelnen Datei -Uploads fest
B.
ServletFileUpload.setsizemax (6*1024*1024); // Gesamtgrößengrenze beim Hochladen mehrerer Dateien
Das obige ist der Beispielcode für das von dem Editor eingeführte Upload für den Commons FileUpload -Implementierungsdatei. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!