Es gibt zwei Möglichkeiten, um das Hochladen von Multi-File in SpringMVC zu implementieren. Einer besteht darin, Dateien in einem Byte -Stream hochzuladen, den wir häufig verwenden, und das andere soll sie mit einem in SpringMVC eingewickelten Parser hochladen. Diese beiden Methoden haben eine große Lücke in der Effizienz des Erreichens von Multi-File-Upload. Schauen wir uns die Implementierungsmethoden dieser beiden Methoden anhand von Beispielen an und vergleichen Sie, wie groß die Effizienzlücke besteht.
1. Laden Sie das entsprechende JAR -Paket herunter. Zusätzlich zum JAR-Paket von SpringMVC, com.springource.org.apache.commons.fileupload-1.2.0.jar und com.springSource.org.apache.commons.io-1.4.0.jar und Com.springSource.org.apache.commons.io-1.0.jar.jar.
2. Konfigurieren Sie die Datei springannotation-servlet.xml (der Dateiname kann angepasst werden, solange sie dem in Web.xml eingeführten Namen ist):
<? xmlns: p = "http://www.springframework.org/schema/p" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: context = "http://wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww./Scontext" xmlns: util = "http://www.springframework.org/schema/util" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springframe.org/schema/beans-ban- http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-30.xsdd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <!-Annotations-Scan-Paket-> <Context: component-scan-scan- Basis-Package = "com.tgb.web.controller.Annotation"> </context: component scan> <!-Ersetzen Sie die folgenden zwei Zeilen von Code-> <MVC: Annotationsgetrieben/> <!-Statische Ressourcenzugriff-> <MVC: Ressourcenstandort = "/IMG/" MAPPING = "/IMG/**". maping = "/js/**"/> <bean id = "viewResolver"> <Eigenschaft name = "prefix" value = "/"> </property> <Eigenschaft name = "suffix" value = ". jsp"> </property> </bean> <bean id = "multipArtresolver"> </DefaultEnCoding "Value". name = "maxUploadsize" value = "10485760000"> </property> <Eigenschaft name = "maxinMemorySize" value = "40960"> </property> </bean> </beans>
3. Konfigurieren Sie die Datei web.xml:
<? xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" XSI: Schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id = "webapp_id" Version = "2,5"> </frain- <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>springMVC</servlet-name> <!-- springMVC distributor--> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classPath*: config/springannotation-servlet.xml </param-value> </init-param> <! <Filter-Klasse> org.springFramework.web.filter.CharacterCodingFilter </Filter-Class> <init-param> <param-name> codieren </param-name> <param-value> utf-8 </param-value> <!-Der Zeichensatz, den Sie verwenden möchten. Ich verwende gb18030-> </init-param> <init-param> <param-name> comparityCoding </param-name> <param-value> true </param-value> </init-param> </filter-poption-orter-name> </filter-maping> </uhl-filter </filter-name> <urlpatattern> <url-pattern> <url-pathern> Servlet, die Sie filtern, konfigurieren Sie es entsprechend Ihren Anforderungen-> </filter- mapping> <Servlet-Mapping> <Servlet-Name> SpringMVC </Servlet-Name> <URL-Pattern>/</url-pufter> </servlet-mapping> </web-App>
4. JSP -Seitencode:
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" http://www.w.w.w.w.w.w.w.w.w3. <html> <head> <script type = "text/javaScript" src = "../ js/jQuery-1.7.2.js"> </script> <meta http-äquiv = "content-type" content = "text/html; charset = utf-8"> <titels einfügen. J = 1; $ (document) .ready (function () {$ ("#btn_add1"). click (function () {document.getElementById ("Newupload1"). InnerHtml+= '<div id = "div _'+i+'"> <input name = "Datei" Datei "Datei" /> <input type "type" ". onclick = "del_1 ('+i+')"/> </div> '; /> <input type = "button" value = "delete" onclick = "del_2 ('+j+')"/> </div> '; Funktion del_1 (o) {document.getElementById ("Newupload1"). } function del_2 (o) {document.getElementById ("Newupload2"). } </script> </head> <body> <h1> SpringMVC-Byte-Stream-Eingabe-Upload-Datei </H1> <Formular name = "userForm1" action = "/springmvc7/Datei/Upload" EngeType = "MultiPart/Form-Data" -Methode "post"> <divaD = ". id="btn_add1" value="add one line" > <input type="submit" value="upload" > </form> <br> <hr align="left" color="#FF0000" size="3"> <br> <h1>springMVC wrapper class upload file</h1> <form name="userForm2" action="/springMVC7/file/upload2" EncTTYPE = "MultiPart/Form-Data" methode = "post" "> <div id =" newupload2 "> <Eingabe type =" Datei "name =" Datei "> </div> <input type =" button "id =" btn_add2 "value =" add eine zeile5. Java Bean, die die Upload -Funktion implementiert:
Paket com.tgb.web.controller.annotation.Upload; Import Java.io.file; import Java.io.FileInputStream; importieren java.io.fileoutputStream; importieren java.io.ioException; Import Java.io.printwriter; importieren java.io.unsupportedenCodingException; importieren java.net.urdecoder; import Java.util.date; Import Java.util.iterator; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; import Javax.swing.filechooser.FileNameExtensionSesionFilter; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.requestMethod; import org.springframework.web.bind.annotation.requestParam; import org.springframework.web.multipart.multipartFile; import org.springframework.web.multipart.multiparthttpServletRequest; import org.springframework.web.multipart.commons.commonsmultipartFile; import org.springframework.web.multipart.commons.commonsmultipartresolver; import org.springframework.web.servlet.ModelandView; import com.tgb.web.controller.entity.user; @Controller @RequestMapping ("/Datei") öffentliche Klasse UploadController {@RequestMapPing ("/Upload") public String addUser (@RequestParam ("Datei") CommonsMultipartFile [] Dateien, httpletrequest) {für (int i = 0; System.out.println ("Dateiname ----------->" + Dateien [i] .GetOriginalFileName ()); if (! files [i] .iseMpty ()) {int pre = (int) system.currentTimemillis (); Versuchen Sie {// den Ausgabestream abrufen und den hochgeladenen File -FileOutputStream OS = New FileOutputStream ("H:/" + New Date (). // Erhalten Sie den Eingabestream der hochgeladenen Datei -DateiInputStream in = (FileInputStream) [i] .getInputStream (); // Schreiben Sie die Datei int b = 0; while ((b = in.read ())! = -1) {os.write (b); } os.flush (); os.close (); in.close (); int Final Time = (int) System.CurrentTimemillis (); System.out.println (FinalTime - Pre); } catch (Ausnahme e) {e.printstacktrace (); System.out.println ("UploadError"); }}} return "/success"; } @RequestMapping ("/upload2") public String upload2 (httpServletRequest -Anforderung, HttpServletResponse -Antwort) löst IllegalStateException, IOException {// eine allgemeine Multipart -Resolver CommonsMultipArtres -MultipArtresolver = new commonsolvers (). // Verteidigen Sie, ob die Anforderung Datei -Upload hat, dh if (multipartresolver.ismultiPart (Anfrage)) {// Um Multipart -Anforderung MultipartTttpServletRequest Multirequest = (multiparthttpServletRequest) zu konvertieren; // Alle Dateinamen in der Anforderung Iterator <string> iter = multirequest.getFileNames () abrufen; while (iter.hasNext ()) {// Aufzeichnung der Zeit am Anfang des Upload -Prozesses und verwenden Sie sie, um die Upload -Zeit int pre = (int) system.currentTimemillis () zu berechnen; // Erhalten Sie die Upload -Datei multiPartFile -Datei = multirequest.getFile (iter.next ()); if (Datei! // Wenn der Name nicht "" ist, bedeutet dies, dass die Datei vorhanden ist, ansonsten bedeutet dies, dass die Datei nicht existiert, wenn (myFileName.trim ())! = "") {System.out.println (myFileName); // benennen Sie den hochgeladenen Dateinamen String -Dateiname = "DemoUPload" + Datei.getOriginalFileName () um; // Definieren Sie den upload path String path = "h:/" + Dateiname; Datei localFile = new Datei (Pfad); file.transferto (localFile); }} // Die Zeit nach dem Hochladen der Datei int FinalTime = (int) system.currentTimemillis () aufzeichnen; System.out.println (FinalTime - Pre); }} return "/success"; } @RequestMapping ("/toppload") public String toppload () {return "/upload"; }} 6. Sehen Sie sich schließlich die Hintergrunddruckdaten an. Die Daten stammen aus dem Zeitpunkt, mit dem Sie Dateien hochladen, die im Hintergrund gedruckt wurden. Das erste Bild ist die Zeit, die zum Hochladen jeder Datei in drei Dateien mit dem Schreiben von Byte -Stream hochgeladen werden kann. Das zweite Bild ist die Zeit, die zum Hochladen jeder Datei in drei identischen Dateien mit einem in SpringMVC eingewickelten Parser benötigt wird:
Byte Stream erkennt die Liefereffizienz des Datei -Uploads und die Ergebnisse zeigen, dass die Zeit, die zum Übergeben der drei Dateien erforderlich ist, 534 ms, 453 ms bzw. 387 ms beträgt.
Die Zeit zum Hochladen von Dateien mit SpringMVC -Parser beträgt 2 ms, 1 ms bzw. 2 ms.
Durch den Vergleich dieser beiden Methoden können wir feststellen, dass die Verwendung von SpringMVC für mehrere Dateien offensichtlich viel effizienter ist als das Schreiben von Zeichen.
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.