Dans Javaweb, le téléchargement et le téléchargement sont une fonction commune. Pour le téléchargement de fichiers, le navigateur passe le fichier au serveur dans le processus de téléchargement du fichier dans un processus de streaming. Généralement, le package Commons-FileUpload est utilisé pour implémenter la fonction de téléchargement. Étant donné que Commons-FileUpload dépend du package Commons-io, vous devez télécharger ces deux packages Commons-fileupload-1.2.1.jar et commons-io-1.3.2.jar.
1. Construisez un environnement
Créez un projet Web et importez le package dans le projet Lib
2. Implémentez le téléchargement de fichiers
(La première méthode de téléchargement)
Créer une nouvelle page upload.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.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" text / html; charset = utf-8 "> <pitle> upload file </ title> </-head> <e body> <! Le chemin absolu vers le projet, ce qui signifie que peu importe où vous copiez le projet à l'avenir, il trouvera le chemin exact -> <form action = "<% = request.getContextPath ()%> / uploadServlet" ENCTYPE = "multipart / form-data" méthode = "POST"> <span> SELECT: </span> <entrée Type = "File" Name = "Fichier"> " </ form> </body> </html>
Créer un nouveau servlet qui gère le téléchargement de fichiers
package com.load; import java.io.file; import java.io.ioexception; import java.util.list; import javax.servlet.servletContext; import javax.servlet.servletException; import javax.servlet.annotation.webservlet; import javax.servlet.http.httation.webservlet; import; javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileItem; import org.apache.commons.fileupload.fileUpLadexception; import org.apache.commons.fileupload.disk.diskfileItemfactory; import org.apache.commons.fileupload.servlet.servletFileupload; @webservlet ("/ uploadServlet") public uploadServlet étend htttpservlet {private static final serialversionuid = 1L; public uploadServlet () {super (); } / * Dans le package Fileupload, les éléments de formulaire complexes de la demande HTTP sont considérés comme un objet FileItem; * L'objet FileItem doit être analysé par la méthode PARSEREQUEST () dans la classe ServletFileUpload * (c'est-à-dire l'objet httpservletRequest enveloppé), c'est-à-dire que le formulaire de texte spécifique et le fichier de téléchargement sont séparés * * / Protected Void DOGT Méthode IsMultiPartContent (): Analysez s'il existe des demandes sur les fichiers dans la demande, Boolean IsMultupart = servletFileUpload.ismulTipartContent (demande); if (IsMultupart) {// Créez une usine de nœuds de disque d'installation réglable Factory Factoryfactory = new DiskFileItemFactory (); // Obtenez les informations de contexte de la demande servletContext servletContext = request.getServletContext (); // répertoire de cache, chaque répertoire de fichiers de répertoire spécifique au serveur = (file) servletContext.getAttribute ("javax.servlet.context.trempdir"); // Définit le répertoire de cache du serveur Factory.SetRepository (référentiel); // La création de l'objet ServletFileUpload doit dépendre de FileItemFactory // L'usine enregistre l'objet de fichier de fichier de téléchargement obtenu sur le disque dur du serveur, c'est-à-dire l'objet DiskFileItem. ServletFileUpload upload = new ServletFileUpload (Factory); essayez {// analyse l'objet httpservletRequest après avoir été emballé, qui consiste à séparer les formulaires de texte et à télécharger des fichiers (les demandes HTTP seront enveloppées en tant que HttpservletRequest) List <FeileItem> items = upload.parserequest (request); pour (FileItem item: items) {String fieldName = item.getFieldName (); String filename = item.getName (); String contentType = item.getContentType (); Boolean isInMemory = item.isinMemory (); long sizeInbytes = item.getSize (); // Instancier un fichier // request.getRealPath (Obtenez le chemin réel) fichier file = new File (request.getRealPath ("/") + "/ charges" + filename.substring (filename.lastIndexof ("//") + 1, filename.length ())); item.write (fichier); }} catch (fileUpLoadexception e) {e.printStackTrace (); } catch (exception e) {e.printStackTrace (); }}} protected vid doPost (request httpservletRequest, httpservletResponse réponse) lève servletException, ioException {doget (request, réponse); }}(La deuxième méthode de téléchargement)
Créez une nouvelle page JSP (comme ci-dessus, le chemin est modifié)
<% @ 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.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" text / html; charset = utf-8 "> <pitle> upload file </ title> </-head> <e body> <! Le chemin absolu vers le projet, ce qui signifie que peu importe où vous copiez le projet à l'avenir, il trouvera le chemin exact -> <form action = "<% = request.getContextPath ()%> / uploadServlet1" EncType = "multipart / form-data" méthode = "POST"> <span> SELECT: </span> <entrée type = "file" name = "file1"> <fort type = "dieu" </ form> </body> </html>
Créer un servlet pour gérer le téléchargement
package com.load; import java.io.file; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputStream; import java.io.outputStream; import javax.servlet.servletException; import javax.servlet.annotation.multingConfig; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletRequest; import; javax.servlet.http.part; @webservlet ("/ uploadServlet1") @ MultipartConfig (location = "") La classe publique UploadServlet1 étend httpServlet {private static final SerialVersionUID = 1l; public uploadServlet1 () {super (); } Protected void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève Servlexception, ioException {réponse.setContentType ("Text / html; charset = utf-8"); request.SetcharAtterencoding ("UTF-8"); // Obtenez un fichier de téléchargement et lisez la pièce de fichier partie = request.getPart ("file1"); // Définissez une variable pour recevoir le nom de fichier String FileName = null; // Content-Disposition: il s'agit de fournir un nom de fichier par défaut lorsque l'utilisateur souhaite enregistrer le contenu demandé en tant que fichier // Content-Disposition: Dites au navigateur d'ouvrir le fichier en téléchargeant pour (String Content: Part.GetHeader ("Content-Disposition"). Split ("")) {System.out.println (contenu); // obtient le nom de fichier if (contenu.trim (). StartSwith ("FileName")) {// intercepter le nom de fichier filename = contenu.substring (contenu.indexof ('=') + 1) .trim (). Remplace ("/" "," ");}} // outputStream out = null; // Entrée en cours d'exécution FileContent = Null; //file. Diviser la ligne et autres données = new FileOutputStream (nouveau fichier (e: / loss "+ file.separator + filen); lire);} System.out.println ("File" + FileName + "Créé" + "/ Loads");(La troisième méthode de téléchargement)
Le package JSPSMartupload est utilisé ici pour télécharger et télécharger. L'auteur estime que ce type de téléchargement et de téléchargement est relativement simple, mais il semble que beaucoup de gens ne l'utilisent pas et ne le comprennent pas.
Créer une page HTML
<! Doctype html> <html> <éadf> <méta http-equiv = "contenu-type" contenu = "text / html; charset = utf-8"> <t titre> Fichier de téléchargement </ title> </ head> <body> <p> </p> <p align = "Center"> upload Selection </p> <form method = "post" Action = "../ doubleadServlet" EncType = "multipart / form-data"> <table align = "Center"> <tr> <td> <div align = "Center"> 1. <entrée type = "file" name = "file1"> </ div> </ td> </ tr> <tr> <Td> <div Align = "Center"> 2. <puty type = "file" fichier = "File =" </ div> </td> </ tr> <tr> <td> <div align = "Center"> 3. <input type = "file" name = "file3"> </ div> </ td> </tr> <tr> <td> <div align = "Center"> <entrée type = "soumi" name = "soumis" valeur = "uponde"> </v> </ td> </ tr> </ Table> </ form> </body> </html>
Créer un servlet pour traiter les fichiers de téléchargement
package com.load; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletException; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpleservlet; import javax.servlet.http.http.httpleservlet; import; javax.servlet.http.httpservletResponse; import javax.servlet.jsp.jspfactory; import javax.servlet.jsp.pagecontext; import com.jspsmart.upload.file; import com.jspsmart.upload.sartupload; import; com.jspsmart.upload.smartuploadexception; @WebServlet ("/ DouploadServlet") La classe publique DownloadServlet étend httpservlet {private statique final long SerialVersionUID = 1l; Public DownloadServlet () {super (); } Protected void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève Servlexception, ioException {réponse.setContentType ("Text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); // Créer un nouvel objet intelligent SmartUpload su = new smartUpload (); / * * PageContext PageContext; Session HTTPSESSION; Application servletContext; ServletConfig Config; Jspwriter out; Page d'objet = this; HttpServLetRequest Request, HttpServletResponse Response où l'objet, la demande et la réponse de la page ont été instanciées, tandis que les 5 autres objets qui ne sont pas instanciés sont instanciés de la manière suivante PageContext = jspxfactory.getPageContext (this, request, réponse, null, true, 8192, true); * / // Obtenez l'environnement de contexte via la classe d'usine JSP PageContext pageContext = jspfactory.getDefaultFactory (). GetPageContext (this, request, réponse, null, true, 8192, true); // télécharger initialiser su.Initialize (pageContext); // Télécharger le fichier essayez {su.upload (); // Enregistrez le fichier de téléchargement dans le répertoire spécifié int count = su.save ("/ partage"); Out.println (Count + "Fichier Téléchargez avec succès! <br>" + Su.ToString ()); } catch (smartUpLoadexception e) {e.printStackTrace (); } // Extraire Télécharger les informations du fichier un par un pour (int i = 0; i <su.getFiles (). GetCount (); i ++) {file file = su.getFiles (). GetFile (i); // Si le fichier n'existe pas si (file.ismissing ()) continue; // affiche les informations actuelles du fichier Out.println ("<Table Border = 1>"); out.println ("<tr> <td> Nom de l'élément de formulaire (fieldname) </td> </td>" + file.getFieldName () + "</td> </tr>"); out.println ("<tr> <td> Longueur de fichier </td> <td>" + file.getSize () + "</td> </tr>"); out.println ("<tr> <td> Nom de fichier </td> <td>" + file.getFileName () + "</td> </tr>"); out.println ("<tr> <td> Nom de fichier </td> <td>" + file.getFileName () + "</td> </tr>"); out.println ("<tr> <td> Extension de fichier </td> <td>" + file.getFileExt () + "</td> </tr>"); out.println ("<tr> <td> Nom complet du fichier </td> <td>" + file.getFilePathName () + "</td> </tr>"); out.println ("</pally> <br>"); }} / ** * @see httpServlet # doPost (requête httpservletRequest, httpservletResponse réponse) * / Protected void doPost (httpServletRequest request, httpservletResponse réponse) lance servletException, ioException {// todo atedo-généré par la méthode Stub Doget (requête, réponse); }} Remarque: le code int count = su.save ("/ partage"); signifie que vous devez d'abord créer un dossier, afin que vous puissiez d'abord en créer un dans WebContent, puis indéfectez le projet, puis le redéposez, un dossier sera créé du côté de la course!
Ou vous pouvez trouver directement le chemin à exécuter et créer le dossier de partage.
3. Réalisez le téléchargement du fichier
(First Fichier Download)
Remarque: ce code accède directement à la classe de servlet
package com.load; import java.io.fileInputStream; import java.io.ioException; import java.io.inputstream; import java.io.outputstream; import javax.servlet.servletException; import javax.servlet.annotation.webservlet; import javax.servlet.http.httation. javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletResponse; // Utilisez directement http: // localhost: 8080 / test1 / téléchargement pour télécharger, mais ceci est erroné. S'il y a du chinois dans le nom du fichier de téléchargement, il deviendra brouillé! @Webservlet ("/ download") La classe publique Download étend httpServlet {private static final long SerialVersionUID = 1l; Public Download () {super (); } Protected void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève ServletException, ioException {réponse.SetContentType ("Text / Plain; Charset = UTF-8"); Response.SetcharAtterencoding ("UTF-8"); Response.sethEader ("emplacement", "chinois.txt"); Response.sethEader ("Content-Disposition", "attachement; filename =" + "compte.txt"); OutputStream outputStream = Response.getOutputStream (); InputStream inputStream = new FileInputStream ("e: / loss" + "/ compte.txt"); octet [] tampon = nouveau octet [1024]; int i = -1; while ((i = inputStream.read (tampon))! = -1) {outputStream.write (tampon, 0, i); } outputStream.flush (); outputStream.close (); } Protected vid doPost (HttpServLetRequest Request, HttpServletResponse Response) lève ServletException, ioException {doGet (request, réponse); }}(La deuxième méthode de téléchargement)
Créez une nouvelle page JSP et sélectionnez Télécharger
<% @ 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.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" Text / html; charset = utf-8 "> <pitle> téléchargement </tapie> </-head> <pody> <A href = "../ DoDownloadServlet? FileName = hehe.txt"> Cliquez pour télécharger </a> </ body> </html>
Créez une classe de servlet à télécharger (Remarque: Si le nom de fichier de ce téléchargement est chinois, il provoquera toujours un code brouillé)
package com.load; importer java.io.bufferedInputStream; import java.io.file; import java.io.fileInputStream; import java.io.ioexception; import java.io.inputstream; import java.io.outputStream; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletRessust; javax.servlet.jsp.pagecontext; import org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartupload; import com.jspsmart.upload.smartuploadexception; @webservlet ("/ dodownloadServlet") Classe publique DoDownDevlet étend HTTPServlet {privriva SerialVersionUID = 1L; public dodownloadServlet () {super (); } Protected void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève Servlexception, ioException {// Obtenez le nom du fichier téléchargé // string filename = request.getParameter ("FileName"); // String filename = new String (filename.getBytes ("ISO8859-1"), "UTF-8"); // Créer un nouvel objet SmartUpload SmartUpload Su = new SmartUpload (); PageContext pageContext = jspfactory.getDefaultFactory (). GetPageContext (this, request, réponse, null, true, 8192, true); // télécharger l'initialisation Su.Initialize (PageContext); // Définit l'ouverture du fichier du fichier su.setContentDisposition (null); // Télécharger le fichier try {su.downloadFile ("/ écouteur /" + nom de fichier); } catch (smartUpLaDexception e) {// TODO Générations Auto-Generated Block E.PrintStackTrace (); }} protected vid doPost (request httpservletRequest, httpservletResponse réponse) lève ServletException, ioException {doGet (request, réponse); }}(La troisième méthode de téléchargement)
Le même code de page JSP que ci-dessus ne sera pas répété ici.
Créez une nouvelle classe serlvet pour implémenter la fonction de téléchargement (Remarque: Même si le nom du fichier est un nom chinois, il n'y aura pas de problèmes brouillés!)
package com.load; importer java.io.bufferedInputStream; import java.io.file; import java.io.fileInputStream; import java.io.ioexception; import java.io.inputstream; import java.io.outputStream; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletRessust; javax.servlet.jsp.pagecontext; import org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartupload; import com.jspsmart.upload.smartuploadexception; @webservlet ("/ dodownloadServlet") Classe publique DoDownDevlet étend HTTPServlet {privriva SerialVersionUID = 1L; public dodownloadServlet () {super (); } Protected void DOGT (HttpServLetRequest Request, HttpServletResponse Response) lève Servlexception, ioException {// Get File Name String path1 = request.getParameter ("FileName"); // Get Path Name String path = request.getSession (). GetServletContext (). GetRealPath ("/ écouteur /" + path1); // Chemin est un fichier épissé en fonction du chemin de journal et du nom du fichier. String filename = file.getName (); essayez {// juger si c'est IE11 booléen flag = request.getheader ("user-agent"). indexof ("like gecko")> 0; // IE11 User-Agent String: Mozilla / 5.0 (Windows NT 6.1; Wow64; Trident / 7.0; RV: 11.0) comme Gecko // IE6 ~ IE10 Version User-Agent String: Mozilla / 5.0 (compatible; MSIE 10.0; Windows NT 6.0; Trident / 6.0) If (request.getheader ("user-agent"). tolowercase (). indexof ("msie")> 0 || file // Ce nom de fichier est utilisé pour le nom de fichier affiché automatiquement dans la boîte de téléchargement du navigateur filename = new String (filename.replaceALL ("", "") .getBytes ("utf-8"), "ISO8859-1"); // Firefox Browser // Firefox Browser User-Agent String: //mozilla/5.0 (Windows NT 6.1; WOW64; RV: 36.0) Gecko / 20100101 Firefox / 36.0} InputStream Fis = new BufferedInputStream (New FileInputStream (Path)); octet [] tampon; tampon = nouveau octet [fis.available ()]; fis.read (tampon); fis.close (); réponse.RESET (); Response.AddHeader ("Content-Disposition", "Pixe; FileName =" + FileName); Response.AddHeader ("Content-Length", "" + File.Length ()); OutputStream OS = Response.getOutputStream (); Response.SetContentType ("Application / Octet-Stream"); OS.Write (Buffer); // Fichier de sortie OS.Flush (); os.close (); } catch (ioException e) {e.printStackTrace (); } System.out.println (nom de fichier); } Protected vid doPost (HttpServLetRequest Request, HttpServletResponse Response) lève ServletException, ioException {doGet (request, réponse); }}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.