Téléchargement et téléchargement de fichiers Spring MVC, comme suit:
(1) Importer des packages JAR: ant.jar, commons-fileupload.jar, Connom-io.jar.
(2) Ajouter Src / Context / Dispatcher.xml
<bean id = "MultipartResolver" P: DeftherCoDing = "UTF-8" />
Notez que vous devez ajouter du contenu à la tête, comme indiqué ci-dessous après l'ajout:
<Beans default-lazy-init = "true" xmlns = "http://www.springframework.org/schema/beans" xmlns: p = "http://www.springframework.org/schema/p" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springfrrame xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springframeworks http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd ">
(3) Ajouter le fichier de classe d'outils.
/ ** * * @author geoin * / package com.geloin.spring.util; Importer java.io.BufferedInputStream; Importer java.io.BufferedOutputStream; Importer java.io.file; import java.io.fileInputStream; Importer java.io.fileOutputStream; import java.text.simpledateFormat; import java.util.arraylist; Importer java.util.date; import java.util.hashmap; Importer java.util.iterator; Importer java.util.list; importation java.util.map; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.tools.zip.zipentry; import org.apache.tools.zip.zipOutputStream; import org.springframework.util.filecopyutils; import org.springframework.web.multupar.MultiPartFile; import org.springframework.web.multupar.MultiparthTTPServletRequest; classe publique fileOperateUtil {private static final string realname = "realName"; String final statique privé STORENAME = "STORENAME"; Taille de chaîne finale statique privée = "taille"; Suffix de chaîne finale statique privée = "suffixe"; String final statique privé ContentType = "ContentType"; private static final String CreateTime = "CreateTime"; chaîne finale statique privée uploaddir = "uploaddir /"; / ** * Renommer le fichier téléchargé * * @param name * @return * / private static String Rename (String name) {long now = long.parselong (new SimpledateFormat ("yyyymmddhhmmss") .format (new Date ())); Long aléatoire = (long) (math.random () * maintenant); String FileName = Now + "" + Random; if (name.indexof (".")! = -1) {FileName + = name.substring (name.lastIndexof (".")); } retour nom de fichier; } / ** * Nom du fichier compressé * * @param name * @return * / private static string zipname (String name) {String prefix = ""; if (name.indexof (".")! = -1) {prefix = name.substring (0, name.lastIndexof (".")); } else {prefix = name; } return préfixe + ".zip"; } / ** * Fichier de téléchargement * * @param request * @param params * @param valeurs * @return * @throws exception * / public static list <map <string, object >> upload (httpServLetRequest request, string [] params, map <string, object []> valeurs) lance l'exception {list <map <string, objet >> result = new ArrayList <map <map <maph, un objet> ();); MultipartHTTPServLetRequest MRequest = (MultipartHTTPServLetRequest); Map <string, multipartFile> fileMap = mRequest.getFileMap (); String uploaddir = request.getSession (). GetServletContext () .getRealPath ("/") + fileOperateUtil.uploaddir; Fichier file = nouveau fichier (uploadDir); if (! file.exists ()) {file.mkdir (); } String filename = null; int i = 0; for (iterator <map.entry <string, multipartFile >> it = filemap.entryset () .iterator (); it.hasnext (); i ++) {map.entry <string, multipartFile> entrée = it.next (); MultipartFile mFile = entry.getValue (); filename = mfile.getoriginalFileName (); String StoreName = Rename (FileName); String nozipname = uploaddir + storename; String zipname = zipname (nozipname); // Téléchargez pour devenir un fichier compressé ZipOutputStream OutputStream = new ZipOutputStream (new BufferedOutputStream (new FileOutputStream (Zipname))); outputStream.putNextStry (new Zipentry (nom de fichier)); outputStream.SetEncoding ("GBK"); FilecopyUtils.copy (mFile.getInputStream (), outputStream); Map <string, object> map = new hashmap <string, object> (); // Correction de la paire de valeurs de paramètre map.put (FileOperateUtil.realName, Zipname (fichier nom)); map.put (fileOperateUtil.storename, zipname (storename)); map.put (fileOperateUtil.size, nouveau fichier (zipname) .length ()); map.put (fileOperateUtil.suffix, "zip"); map.put (fileOperateUtil.contentType, "Application / Octet-Stream"); map.put (fileOperateUtil.createtime, new Date ()); // Paire de valeurs de paramètre personnalisée pour (String Param: params) {map.put (param, valeurs.get (param) [i]); } result.add (map); } Retour Résultat; } / ** * Télécharger * @param demande * @param réponse * @param storename * @param contentType * @param realname * @throws exception * / public static download (httpsservletRequest request, httpservletResponse réponse, string storename, string contentType, string realName) exception {exception { Response.SetContentType ("Text / HTML; charSet = UTF-8"); request.SetcharAtterencoding ("UTF-8"); BufferedInputStream bis = null; BuffredOutputStream bos = null; String ctxpath = request.getSession (). GetServletContext () .getRealPath ("/") + fileOperateUtil.uploaddir; String downloadPath = ctxpath + storename; long fileLength = nouveau fichier (téléchargement) .length (); Response.SetContentType (ContentType); Response.sethEader ("Content-Disposition", "Pixe; FileName =" + New String (realName.getBytes ("UTF-8"), "ISO8859-1")); Response.SetHeader ("Content-Length", String.ValueOf (FileLength)); bis = new BufferedInputStream (new FileInputStream (téléchargement)); bos = new BufferedOutputStream (réponse.getOutputStream ()); octet [] buff = nouveau octet [2048]; int bytesread; while (-1! = (bytesRead = bis.read (buff, 0, buff.length))) {bos.write (buff, 0, bytesRead); } bis.close (); bos.close (); }} Il peut être utilisé complètement sans changer la classe. Il convient de noter que le fichier téléchargé est placé sous WebContent / UploadDir.
(4) Ajouter un fichieroperateController.java
/ ** * * @author geoin * / package com.geloin.spring.Controller; import java.util.hashmap; Importer java.util.list; importation java.util.map; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.springframework.sterreotype.Controller; import org.springframework.web.bind.servletRequestUtils; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandView; import com.geloin.spring.util.fileoperateutil; @Controller @RequestMapping (value = "background / fileOperate") classe publique FileOperateController {/ ** * à l'emplacement où le fichier est téléchargé * @return * / @RequestMapping (value = "to_upload") public ModelandView toupload () {return new ModelAwView ("background / fileopeeratered"); } / ** * Fichier de téléchargement * * @param request * @return * @throws exception * / @requestmapping (value = "upload") public ModelandView upload (httpservletRequest request) lève exception {map <string, objet> map = new Hashmap <string, object> (); // alias String [] alais = servletRequestUtils.getStringParameters (demande, "allais"); String [] params = new String [] {"alais"}; Map <string, objet []> valeurs = new hashmap <string, object []> (); valeurs.put ("allais", alaisses); List <map <string, objet >> result = fileOperateUtil.upload (request, params, valeurs); map.put ("résultat", résultat); return new ModelAndView ("background / fileOperate / list", map); } / ** * Télécharger * * @Param Pièce jointe * @param demande * @param réponse * @return * @throws exception * / @RequestMapping (value = "download") public ModelAndView Download (httpSservletRequest request, httpservletResponse réponse) lance l'exception {string starsame = "2012051340364510870879724.zip; String realName = "Java Design Pattern.zip"; String contentType = "Application / Octet-Stream"; FileOperateUtil.Download (request, réponse, storename, contentType, realName); retourner null; }}Veuillez modifier la méthode de téléchargement vous-même. Si vous utilisez la base de données pour enregistrer les informations de fichier téléchargées, veuillez vous référer à l'instance MyBatis d'intégration Spring MVC.
(5) Ajouter un fichier / upload.jsp
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Taglib Prefix = "C" URI = "http://java.sun.com/jsp/jstl/Core"%> <! DocType html public "- // w3c // dtd xhtt 1.0 Transitional // en "" http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd "> <html> <éadfri <body> </ body> <formulaire encType = "multipart / form-data" action = "<c: url value =" / background / fileoterate / upload.html "/>" method = "Post"> <input type = "file" name = "file1" /> <entrée type = "text" name = "alais" /> <br /> <puty type = "file" nom = "file2" /> <powny type = <br /> <puty type = "file" nom = "file2" name = "alalis" /> <br /> <input type = "file" name = "file3" /> <input type = "text" name = "allais" /> <r /> <input type = "soume" value = "upload" /> </ form> </ html>
Assurez-vous que la valeur ENCTYPE est multipART / Form-Data; La valeur de la méthode est la publication.
(6) Ajouter un fichieraperate / list.jsp
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Taglib Prefix = "C" URI = "http://java.sun.com/jsp/jstl/Core"%> <! DocType html public "- // w3c // dtd xhtt 1.0 Transitional // en "" http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd "> <html> <éadfri <body> <c: foreach items = "$ {result}" var = "item"> <c: foreach items = "$ {item}" var = "m"> <c: if test = "$ {m.key eq 'realname'}"> $ {m.value} </ c: if> <btml> </oenach> </c: forach> </ body>(7) Accédez à la page de téléchargement via http: // localhost: 8080 / spring_test / background / fileoperate / to_upload.html, et téléchargez le fichier via http: // localhost: 8080 / spring_test / background / fileoperate / download.html
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.