Hay dos formas de implementar la carga de múltiples archivos en SpringMVC. Una es cargar archivos en una secuencia de bytes que a menudo usamos, y la otra es cargarlos usando un analizador envuelto en SpringMVC. Estos dos métodos tienen una gran brecha en la eficiencia de lograr la carga de múltiples archivos. Echemos un vistazo a los métodos de implementación de estos dos métodos a través de ejemplos, y comparemos cuán grande existe la brecha en la eficiencia.
1. Descargue el paquete JAR relevante. Además del paquete JAR de SpringMVC, com.springsource.org.apache.commons.fileupload-1.2.0.jar y com.springsource.org.apache.commons.io-1.4.0.jar y com.springsource.org.apache.commons.io-1.4.0.jar también son necesarios.
2. Configure el archivo SpringAnnotation-Servlet.xml (el nombre del archivo se puede personalizar, siempre que sea el mismo que el nombre introducido en Web.xml):
<? xml versión = "1.0" encoding = "utf-8"?> <!-heal encabezado-> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschemaSchemaSchemaNance" xmlns: p = "http://www.springframework.org/schema/p" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: context = "http://www.springframework.org/schema/schemch" xmlns: util = "http://www.springframework.org/schema/util" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/spreing-beans-3. http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <!-Paquete de exploración de anotaciones-> <contexto: componente-scan Base-Package = "com.tgb.web.controller.annotation"> </context: component-scan> <!-Reemplace las siguientes dos líneas de código-> <mvc: annotation-riven/> <!-static recource Access-> <mvc: recursos ubicación = "/img/" mapping = "/img/**"/> <mvc: ubicación de recursos = "/"/"/"/"/"/JS/" mapping = "/js/**"/> <bean id = "ViewResolver"> <Property name = "prefix" valor = "/"> </propiedad> <propiedad name = "sufix" valor = ". jsp"> </sperty> </bean> <bean id = "multipartresolver"> <propial name = "valoración predeterminada" valor = "utf-8"> </propiedad> < name = "maxUploadSize" value = "10485760000"> </property> <Property name = "maxInMemorySize" value = "40960"> </property> </ beans> </ beans>
3. Configure el archivo web.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" " 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"> <portsmvc1 </visual <velceed-file> index.html </Welcome-File> </le Welcome-File-List> <Servlet> <Servlet-name> springmvc </servlet-name> <!-springmvc distribuidor-> <ervlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <itin-param> <cuentacname> contextenfiglewlaward <amam-value> classpath*: config/springannotation-servlet.xml </am-value> </it-param> <!-indica que el servlet se inicializa cuando se inicia Tomcat-> <OAD-ONSTARTUP> 1 </load-on-startup> </servlet> <filter> <filter-name> encoderingfilter </filter-name> <Tilter-Class> org.springframework.web.filter.characteriCodingFilter </filter-class> <Init-param> <amamname> codificación </amamname> <amam-value> utf-8 </param-value> <!-Establezca el conjunto de caracteres que desea usar. Estoy usando GB18030-> </ init-param> <initparam> <amamname> forceEncoding </amamname> <amam-value> true </param-value> </init-param> </filtre> <filter-mapping> <filter-name> encodingfilter </filter-name> <url-pattern>/*</surl-patn> <! Filtro, configúrelo de acuerdo con sus necesidades-> </filter-mapping> <servlet-mapping> <servlet-name> springmvc </servlet-name> <url-pattern>/</url-Pattern> </servlet mapping> </beb-app>
4. Código de página JSP:
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" PageEncoding = "utf-8"%> <! DocType html public "-// w3c // dtd html 4.01 transición // en" "http://www.w3.org/tr/html4/loos.dttd <html> <fead> <script type = "text/javaScript" src = "../ js/jQuery-1.7.2.js"> </script> <meta http-oquiv = "content-type" content = "text/html; charset = utf-8"> <title> title> title </title> <script type = "text/javaScript" i = 1 1; j = 1; $(document).ready(function(){ $("#btn_add1").click(function(){ document.getElementById("newUpload1").innerHTML+='<div id="div_'+i+'"><input name="file" type="file" /><input type="button" value="Delete" onClick = "del_1 ('+i+')"/> </div> '; /> <input type = "Button" Value = "Delete" OnClick = "del_2 ('+j+')"/> </div> '; función del_1 (o) {document.getElementById ("newUpload1"). RemoVeChild (document.getElementById ("div _"+o)); } function del_2 (o) {document.getElementById ("newUpload2"). RemoVeChild (document.getElementById ("div _"+o)); } </script> </head> <body> <h1> springmvc byte stream entrada de entrada de carga </h1> <form de nombre = "userform1" action = "/springmvc7/file/upload" enctype = "multipart/form-data" método = "post"> <div ID = "newupload1">> <input type = "file =" file = "archivo" </div> <butin type type = "type" id = "btn_add1" value = "agregar una línea"> <input type = "enviar" value = "cargar"> </form> <br> <hr align = "izquierda" color = "#ff0000" size = "3"> <br> <h1> springmvc wrapper class de clase de carga </h1> <name de formulario = "usereform2" Action = "/springmvc7/file de envoltura enctype = "multipart/form-data" método = "post" "> <div id =" newUpload2 "> <input type =" file "name =" file "> </div> <input type =" button "id =" btn_add2 "valor =" agregar una línea "> <input type =" enviar "valor =" carga "> </form> </body> </html>5. Java Bean que implementa la función de carga:
paquete com.tgb.web.controller.annotation.upload; import java.io.file; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioException; import java.io.printwriter; import java.io.unsupportedencodingException; import java.net.urldecoder; import java.util.date; import java.util.iterator; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.swing.filechooser.filenameExtensionFilter; importar org.springframework.stereotype.controller; importar org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.requestmethod; importar org.springframework.web.bind.annotation.requestparam; importar org.springframework.web.multipart.multipartfile; importar org.springframework.web.multipart.multiparthttpservletRequest; importar org.springframework.web.multipart.commons.commonsmultipartfile; importar org.springframework.web.multipart.commons.commonsmultipartresolver; importar org.springframework.web.servlet.modelandview; import com.tgb.web.controller.entity.user; @Controller @RequestMapping ("/file") public class uploadController {@RequestMapping ("/upload") public String addUser (@RequestParam ("file") CommonSmultipartFile [] archivos, solicitud httpservletrequest) {for (int i = 0; i <file.llength; i ++) {{ System.out.println ("FileName ----------->" + archivos [i] .getOriginalFileName ()); if (! archivos [i] .isEmpty ()) {int pre = (int) System.CurrentTimemillis (); Pruebe {// Obtenga la transmisión de salida y cambie el nombre del archivo cargado FileOutputStream OS = nuevo FileOutputStream ("H:/" + New Date (). GetTime () + archivos [i] .GetOriginalFileName ()); // Obtenga la transmisión de entrada del archivo cargado FilEInputStream in = (fileInputStream) archivos [i] .getInputStream (); // Escribir el archivo int b = 0; while ((b = in.read ())! = -1) {os.write (b); } os.flush (); os.close (); cercar(); int Final Time = (int) System.CurrentTimemillis (); System.out.println (final de tiempo - pre); } catch (Exception e) {E.PrintStackTrace (); System.out.println ("uploadErRor"); }}} return "/Success"; } @RequestMapping ("/upload2") public String upload2 (httpservletRequest solicitud, respuesta httpServletResponse) lanza ilegalstateException, ioexception {// crea un resolución general de multipartes de múltiplessurver commonsmultesolver multipARTresolver = new CommodSmultipartresolver (request.getSession (). // Defiende si la solicitud tiene carga de archivo, es decir, if (multipartresolver.ismultipart (request)) {// convirtir a solicitud multipart múltiphttpservletRequest multireQuest = (multipThttPservletRequest) request; // Obtenga todos los nombres de archivos en el iterador de solicitud <String> itere = multirequest.getFileNames (); while (iter.hasNext ()) {// Registre el tiempo al comienzo del proceso de carga y úselo para calcular el tiempo de carga int pre = (int) System.CurrentTimemillis (); // Obtener el archivo de carga MultipartFile de carga = multirequest.getFile (iter.next ()); if (file! = null) {// Obtenga el nombre de archivo de la cadena de archivo cargada actualmente myFileName = file.getOriginalFileName (); // Si el nombre no es "", significa que el archivo existe, de lo contrario significa que el archivo no existe si (myFileName.trim ())! = "") {System.out.println (myFileName); // Cambiar el nombre de la cadena de nombre de archivo cargado FileName = "DemoUpload" + File.getoriginalFileName (); // Defina la ruta de la ruta de carga = "H:/" + nombre de archivo; Archivo localfile = nuevo archivo (ruta); file.transferto (localfile); }} // Registre el tiempo después de cargar el archivo int finalTime = (int) System.CurrentTimEmillis (); System.out.println (final de tiempo - pre); }} return "/Success"; } @RequestMapping ("/toupload") public String toupload () {return "/upload"; }} 6. Finalmente, mire los datos de impresión de fondo. Los datos provienen del tiempo que lleva cargar archivos impresos en segundo plano. La primera imagen es el tiempo que lleva cargar cada archivo en tres archivos usando la escritura de transmisión de byte. La segunda imagen es el tiempo que lleva cargar cada archivo en tres archivos idénticos utilizando un analizador envuelto en SpringMVC:
BYTE Stream se da cuenta de la eficiencia de entrega de la carga de archivos, y los resultados muestran que el tiempo requerido para pasar los tres archivos es de 534 ms, 453 ms y 387ms respectivamente.
El tiempo para cargar archivos utilizando el analizador SpringMVC es 2 ms, 1ms y 2ms respectivamente.
Al comparar estos dos métodos, podemos encontrar que usar SpringMVC para múltiples archivos es obviamente mucho más eficiente que escribir personajes.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.