Das Hochladen von Webdateien verwendet Post. Im Gegensatz zu Formularen nach dem Senden von Post muss das Hochladen von Dateien das EngTePe-Attribut des Formulars auf MultiPart/Form-Data festlegen. Da die hochgeladenen Dateien relativ groß sind, muss dieser Parameter festgelegt werden, um anzugeben, dass der Browser einen binären Upload verwendet. Wenn nicht festgelegt, stellt die EngeTePe-Eigenschaft für Anwendungen/X-Www-Form-Urscoded standardmäßig aus. Mithilfe des Browsers wird ASCII verwendet, um Daten an den Server zu senden, was dazu führt, dass die Datei nicht gesendet wird.
Um eine Datei hochzuladen, verwenden Sie die Dateidomäne (<Eingabe type = 'Datei'/> und setzen
Die Client -Upload -Seite ist in der Abbildung dargestellt:
Der Code ist wie folgt:
Upload.html
<! DocType html public "-// w3c // dtd html 4.01 transitional // ede http-equiv="content-type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="css/style.css"></head><body><form action="servlet/UploadServlet" method="post" enctype="multipart/form-data"><div align="center"><br/> <fieldset> <legend>Upload file</legend><br/> <div class='line'> <div align='left'>Upload file 1</div> <div align='left'> <input type="file" name="file1"> </div> </div> <div class='line'> <div align='left'>Upload file 2</div> <div Align = 'links'> Upload -Datei 2 </div> <div Align = 'links'> Align = 'links'> <Eingabe type = "file" name = "file2"> </div> </div> <div class = 'Zeile'> <div Align = 'links'> Upload -Datei Beschreibung 1 </div> <div Align = '> <input'> <input '> <input " <div align = 'links'> Upload -Datei Beschreibung 2 </div> <div Align = 'links'> <Eingabe type = "text" name = "Beschreibung2"> </div> </div> <div class = 'line'> <div align = 'links'> load Datei </div> </div> </fieldset> </div> </form> </body> </html>
Der vom Client ausgeführte Code ist sehr einfach und der Server ist komplizierter. Um den Inhalt zu erhalten, muss die vom Browser eingereichte Anfrage gemäß dem vom HTTP -Protokoll angegebenen Format analysiert werden.
Es ist problematischer, binäre Ströme zu analysieren. Viele Klassenbibliotheken haben diese Arbeit bereits abgeschlossen. Beispielsweise ist SmartUpload und Apache Commons FileUpload.smartUpload eine kommerzielle Klassenbibliothek. Die Daten werden während der Analyse des Anforderungsprozesses im Speicher gespeichert, sodass sie schneller sind, aber der Speicherüberlauf tritt beim Hochladen größerer Dateien auf. Apache Commons FileUpload ist eine kostenlose und Open -Source -Klassenbibliothek. Einige Frameworks wie Struts integrieren die apache Common FileUpload -Klassenbibliothek, um Datei -Uploads zu implementieren.
Wie in der Abbildung gezeigt:
Der Code ist wie folgt:
Paket com.Helloweenvsfei.servlet; import Java.io.file; Import Java.io.fileOutputStream; Import Java.io.ioxception; Import Java.io.inputStream; Import Java.io.outputStream; Import Java.io.printwrititer; javax.servlet.servletException; import javax.servlet.http.httpervlet; import Javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpletRespect; org.apache.commons.FileUpload.FileItem; import org.apache.commons.FileUpload.FileUploadexception; öffentliche Klasse UploadServlet erweitert HttpServlet {private statische endgültige lange Serialversionuid = 752302473721832088l; public void dodget (httpServletRequest Request, httpServletResponse-Antwort) löst ServletException aus, ioException {response.setcharactercoding ("utf-8"); Antwort.getWriter (). println ("Bitte laden Sie die Datei in Post hoch"); } @SuppressWarnings ("Deaktiviert") public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException, IOException {file file1 = null, file2 = null aus; String Beschreibung1 = NULL, Beschreibung2 = NULL; response.setcharactercoding ("utf-8"); response.setContentType ("text/html"); Printwriter out = response.getWriter (); out.println ("<! docType html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<kopf> <titels> a servlet </title> </head>"); out.println ("<link rel = 'stylesheet' type = 'text/css' href = '../css/style.css'>"); out.println ("<body>"); out.println ("<div align = center> <br/>"); out.println ("<fieldset style = 'width: 90%'> <legend> hochladen Datei </legend> <br/>"); out.println ("<div class = 'line'>"); out.println ("<div align = 'links' class = 'linksdiv'> hochladen load load load load load load load load load load lload: </div>"); out.println ("<div align = 'links' class = 'rightdiv'>"); // diskFileUpload -Objekt verwenden, um die Request diskFileUpload diskFileUpload = new diskFileUpload () anzualysieren; Versuchen Sie {// Das analysierte Ergebnis in Listliste <DileItem> list = diskFileUpload.ParSerequest (Anfrage); out.println ("Trace durch alle FileItems ... <br/>"); // Überliste alle FileItems im FileItem FileItem: list) {if (FileItem.isformfield ()) {// Wenn es sich um ein Textfeld handelt, if ("Beschreibung1" .Eequals (FileItem.getfieldName ())) {// if der Name des FileItems ist Beschreibung 1.Println ("Travel to capture to capture 1 ... <Br. Beschreibung1 = neuer String (FileItem.getString (). getByTes (), "utf-8"); } if ("Beschreibung2" .Equals (FileItem.getFieldName ())) {// Wenn der Name "FileItem" bezeichnet ist, ist out2 out.println ("Reise zu Beschreibung 2 ... <br/>"); Beschreibung2 = neuer String (FileItem.getString (). getByTes (), "utf-8"); }} else {// sonst für das Dateifeld if ("file1" .equals (fileItem.getfieldname ()) {// Dateiobjekt, das von der Client-Datei-Path-Datei remoteFile = new Datei erstellt wurde (neuer String (FileItem.getName (). GetBytes (), "UTF-8"); out.println ("Reise zu Datei1 ... <br/>"); out.println ("Client -Dateisposition:" + remoteFile.getabsolutepath () + "<br/>"); // serverseitige Datei, in der Upload-Ordnerdatei platzieren1 = neue Datei (this.getServletContext (). GetRealPath ("Attachment"), remoteFile.getName ()); Datei1.getParentFile (). Mkdirs (); Datei1.CreateNewFile (); // Schreiben Sie eine Datei und schreiben Sie den Dateiinhalt von FileItem in die Datei inputStream Ins = FileItem.getInputStream (); OutputStream OUS = new FileOutputStream (Datei1); try {byte [] buffer = new byte [1024]; int len = 0; while ((len = Ins.Read (Puffer))> -1) ous.write (Puffer, 0, Len); out.println ("Datei speichern" + Datei1.getabsolutepath () + "<br/>"); } endlich {ous.close (); Ins.CLOSE (); }} if ("file2" .equals (fileItem.getfieldname ()) {// Dateiobjekt, das von Client-Datei-Path-Datei remoteFile = neue Datei (neuer String (fileItem.getName (). GetByTes (), "utf-8") erstellt wurde; out.println ("Reise zu Datei2 ... <br/>"); out.println ("Client -Dateisposition:" + remoteFile.getabsolutepath () + "<br/>"); // serverseitige Datei, in die Upload-Ordnerdatei 2 = neue Datei (this.getServletContext (). File2.GetParentFile (). mkdirs (); File2.CreateNewFile (); // Schreiben Sie eine Datei und schreiben Sie den Dateiinhalt von FileItem in die Datei inputStream Ins = FileItem.getInputStream (); OutputStream OUS = new FileOutputStream (Datei2); try {byte [] buffer = new byte [1024]; int len = 0; while ((len = Ins.Read (Puffer))> -1) ous.write (Puffer, 0, Len); out.println ("Datei speichern" + file2.getabsolutepath () + "<br/>"); } endlich {ous.close (); Ins.CLOSE (); }}}} out.println ("Anfrage Parsen ist abgeschlossen"); } catch (FileUploadexception e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } out.println ("</div>"); out.println ("<div align = 'links' class = 'linksdiv'> file1: </div>"); out.println ("<div align = 'links' class = 'rightdiv'>"); out.println ("<a href = '" + request.getContextPath () + "/cattel/" + file1.getName () + "' target = _blank>" + file1.getName () + "</a>"); out.println ("</div>"); out.println ("</div>"); } if (Datei2! = null) {out.println ("<div class = 'line'>"); out.println ("<div align = 'links' class = 'linksdiv'> file2: </div>"); out.println ("<div align = 'links' class = 'rightdiv'>"); out.println ("<a href = '" + request.getContextPath () + "/contant/" + urlencoder.encode (file2.getName (), "utf-8") + "' target = _blank>" + file2.getName () + "</a>"); out.println ("</div>"); out.println ("</div>"); } out.println ("<div class = 'line'>"); out.println ("<div align = 'links' class = 'linksdiv'> Beschreibung1: </div>"); out.println ("<div align = 'links' class = 'rightdiv'>"); out.println ("<div align = 'links' class = 'rightdiv'>"); out.println ("<div align = 'links' class = 'linksdiv'> Beschreibung2: </div>"); out.println ("<div align = 'links' class = 'rightdiv'>"); out.println (Beschreibung2); out.println ("</div>"); out.println ("</div>"); out.println ("</fieldset> </div>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Der Programmbetriebseffekt ist in der Abbildung dargestellt:
Dieser Artikel wurde in "Zusammenfassung der Java -Upload -Operationstechniken" zusammengestellt, und jeder kann gerne lernen und lesen.
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.