Il existe deux façons d'implémenter le téléchargement multi-fichiers dans SpringMVC. L'un consiste à télécharger des fichiers dans un flux d'octets que nous utilisons souvent, et l'autre est de les télécharger à l'aide d'un analyseur enveloppé dans SpringMVC. Ces deux méthodes ont un grand écart dans l'efficacité de la réalisation du téléchargement multi-fichiers. Jetons un coup d'œil aux méthodes de mise en œuvre de ces deux méthodes à travers des exemples et comparons à quelle taille l'espace d'efficacité existe.
1. Téléchargez le package JAR pertinent. En plus du package JAR de Springmvc, com.springsource.org.apache.commons.fileupload-1.2.0.jar et com.springsource.org.apache.commons.io-1.4.0.jar et com.springsource.org.apache.commons.io-1.4.0.jar sont également nécessaires.
2. Configurer le fichier Springannotation-Servlet.xml (le nom du fichier peut être personnalisé, tant qu'il est le même que le nom introduit dans web.xml):
<? xml version = "1.0" Encoding = "UTF-8"?> <! - Bean Header -> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlSchema" xmlns: p = "http://www.springframework.org/schema/p" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: context = "http://www.springframeworkwork.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <! - Package d'annotation -> <contexte: Component-Scanan Base-Package = "com.tgb.web.controller.annotation"> </ context: ComponentScan> <! - Remplacez les deux lignes de code suivantes -> <mvc: Resources Location = "/ img /" mapping = "/ img / **" /> <mvc: les ressources = "/ js /" mapping = "/ js / **" /> <bean id = "ViewResolver"> <propriété name = "prefix" value = "/"> </ propriété> <propriété name = "suffixe" value = ". jsp"> </ propriété> </ bean> <bean id = "multipartResolver"> <propriété name = "datencoding" value = "utf-8"> </ property> Name = "MAXUPSUPS =" utf-8 "> </ Property> value = "10485760000"> </ propriété> <propriété name = "maxinMemorySize" value = "40960"> </ propriété> </bEAN> </bans>
3. Configurez le fichier web.xml:
<? xml version = "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"> <splay-same> SpringMvc1 </ Display-Name> <Leloy-File> index.html </venke-file> </ welcome-file-list> <serplet> <Serplet-Name> SpringMvc </Servlet-Name> <! - Springmvc Distributeur -> <Serplet-Class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <IniT-Param> <param-name> contextConfigLocation </ Param-name> <Am param-Value> ClassPath *: config / springannotation-servlet.xml </ param-Value> </ init-param> <! - Indique que le servlet est initialisé lorsque Tomcat est démarré -> <foard-on-startup> 1 </part-on-startup> </ sertlet> <hysther> <filter-name> EncodingFilter </ Filter-Name> <Filter-Class> org.springframework.web.filter.characterencodingFilter </ Filter-Class> <Init-Param> <Am param-name> Encoding </ Param-name> <param-Value> utf-8 </ param-value> <! J'utilise GB18030 -> </ init-param> <init-param> <param-name> Forceencoding </ param-name> <param-value> true </ paramter-name> EncodingFilter </filter> <url-mapping> / * * </ url-protègeur> <! Vous souhaitez filtrer, le configurer en fonction de vos besoins -> </filter-mapping> <servlet-mapping> <servlet-name> springmvc </vrlet-name> <url-potern> / </url-potern> </ servlet-mapping> </low-apprent>
4. Code de page JSP:
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <! Doctype HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // En" "http://www.w3.org/tr/html4/loose" <Html> <Aad> <Script Type = "Text / JavaScript" src = "../ js / jQuery-1.7.2.js"> </ script> <meta http-equiv = "Content-Type" Content = "Text / html; charset = utf-8"> <itle> title ici </ title> <script type = "Text / javascript"> i = 1; j = 1; $ (document) .ready (function () {$ ("# btn_add1"). cliquez (function () {document.getElementById ("newupload1"). InnerHtml + = '<div id = "div _' + i + '"> <entrée name = "file" type = "file" /> <entrée type = "bouton" value = "delete" onclick = "del_1 ('+ i +')" /> </ div> '; i = i + 1;}); $ ("# btn_add2"). Type = "Button" Value = "Delete" OnClick = "Del_2 ('+ J +')" /> </ div> '; J = J + 1; fonction del_1 (o) {document.getElementById ("newupload1"). removechild (document.getElementById ("div _" + o)); } fonction del_2 (o) {document.getElementById ("newupload2"). removechild (document.getElementById ("div _" + o)); } </ script> </ head> <body> <h1> Springmvc Byte Stream Input upload file </h1> <form name = "userForm1" Action = "/ Springmvc7 / File / upload" EncType = "multipart / form-data" méthode = "post"> <div id = "newUpload1"> <entrée type = "file" nom = "file"> </ div> id = "btn_add1" value = "Ajouter une ligne"> <input type = "soumi" value = "upload"> </ form> <br> <hr align = "Left" color = "# ff0000" size = "3"> <br> <h1> springmvc wrapper claper class upload file EncType = "multipart / form-data" méthode = "post" "> <div id =" newupload2 "> <input type =" file "name =" file "> </ div> <input type =" Button "id =" btn_add2 "value =" Add One Line "> <entrée type =" soumis "value =" upload "> </ form> </odody> </ html>5. Java Bean qui implémente la fonction de téléchargement:
package com.tgb.web.controller.annotation.upload; Importer java.io.file; import java.io.fileInputStream; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.printwriter; Importer java.io.UNSUPPORTEDENCODINGException; import java.net.urldecoder; Importer java.util.date; Importer java.util.iterator; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.swing.filechooser.filenameExtensionFilter; import org.springframework.sterreotype.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.multupar.MultiPartFile; import org.springframework.web.multupar.MultiparthTTPServletRequest; import org.springframework.web.multipartipart.commons.commonsMultiPartfile; import org.springframework.web.multupar.commons.commonsMultipartreSolver; import 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 [] files, httpServleTrequest request) {for (int i = 0; i <file.Length; i ++) { System.out.println ("FileName ----------->" + fichiers [i] .getoriginalFileName ()); if (! files [i] .iSempty ()) {int pre = (int) System.currenttimemillis (); Essayez {// Obtenez le flux de sortie et renommez le fichier téléchargé FileOutputStream OS = new FileOutputStream ("H: /" + new Date (). GetTime () + Files [i] .getoriginalFileName ()); // obtient le flux d'entrée du fichier téléchargé FileInputStream dans = (fileInputStream) fichiers [i] .getInputStream (); // Écrivez le fichier int b = 0; while ((b = in.read ())! = -1) {os.write (b); } os.flush (); os.close (); joindre(); int fin final = (int) System.Currenttimemillis (); System.out.println (final - pre); } catch (exception e) {e.printStackTrace (); System.out.println ("uploadError"); }}} return "/ succès"; } @RequestMapping ("/ upload2") Public String upload2 (HttpServLetRequest Request, HttpservletResponse Response) lance illégalstateException, ioException {// Créer un résolver multipart général CommonsMultipartResolver MultipartTreSolver = New ComonsMultipartreSolver (request.getSession (). // Défendez si la demande a le téléchargement de fichiers, c'est-à-dire si (multipartResolver.ismultupartip (request)) {// converti en multiparter la demande multiparthttpservletRequest multi-iquest = (multipartHTTPServleRequest) requette; // obtient tous les noms de fichiers dans la demande Iterator <string> iter = multirequest.getFileNames (); while (iter.hasnext ()) {// Enregistrez l'heure au début du processus de téléchargement et utilisez-le pour calculer le temps de téléchargement int pre = (int) System.currenttimemillis (); // Obtenez le fichier de téléchargement MultipartFile File = MultiRequest.getFile (iter.next ()); if (file! = null) {// Obtenez le nom de fichier de la chaîne de fichiers actuellement téléchargée myFileName = file.getoriginalFileName (); // Si le nom n'est pas "", cela signifie que le fichier existe, sinon cela signifie que le fichier n'existe pas si (myFileName.trim ())! = "") {System.out.println (myFileName); // Renommez la chaîne de nom de fichier téléchargée filename = "Demoupload" + file.getoriginalFileName (); // Définissez le chemin de téléchargement de la chaîne Path = "H: /" + FileName; Fichier localfile = nouveau fichier (chemin); file.transferto (localfile); }} // Enregistrez l'heure après le téléchargement du fichier int finaltime = (int) System.currentTimemillis (); System.out.println (final - pre); }} return "/ succès"; } @RequestMapping ("/ toupload") String public toupload () {return "/ upload"; }} 6. Enfin, regardez les données d'impression d'arrière-plan. Les données proviennent du temps qu'il faut pour télécharger des fichiers imprimés en arrière-plan. La première image est le temps nécessaire pour télécharger chaque fichier dans trois fichiers en utilisant l'écriture de flux d'octets. La deuxième image est le temps nécessaire pour télécharger chaque fichier dans trois fichiers identiques à l'aide d'un analyseur enveloppé dans Springmvc:
Byte Stream réalise l'efficacité de livraison du téléchargement de fichiers, et les résultats montrent que le temps nécessaire pour passer les trois fichiers est respectivement de 534 ms, 453 ms et 387 ms.
Le temps de téléchargement de fichiers à l'aide de Parser SpringMVC est respectivement de 2 ms, 1 ms et 2 ms.
En comparant ces deux méthodes, nous pouvons constater que l'utilisation de SpringMVC pour plusieurs fichiers est évidemment beaucoup plus efficace que l'écriture de caractères.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.