Dans le développement d'applications Web, les fonctions de téléchargement de fichiers et de téléchargement sont des fonctions très couramment utilisées. L'article suivant vous présentera une explication détaillée du téléchargement de fichiers Javaweb et des exemples de téléchargement.
Pour le téléchargement de fichiers, le navigateur soumet le fichier au serveur sous la forme d'un flux pendant le processus de téléchargement. Il est plus gênant si vous utilisez directement Servlet pour obtenir le flux d'entrée du fichier téléchargé, puis analysez les paramètres de demande. Par conséquent, il est généralement choisi pour utiliser le composant de téléchargement de fichiers Common-Fileup, le composant de téléchargement de l'outil Open Source Apache. Le package JAR du composant de téléchargement Common-FileUpload peut être téléchargé sur le site officiel d'Apache. Common-FileUpload dépend du package Common-IO, vous devez donc également télécharger ce package.
1. Téléchargement de fichiers
Page de téléchargement JSP
Les précautions suivantes sont nécessaires pour télécharger des composants
formulaire formulaire: méthode = ”post” encType = ”multipart / formulaire de formulaire”
Appartient au domaine: entrée type = ”file” name = ”file” size = ”50”
Ces deux points sont réalisés et affichés comme suit
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Upload test</title></head><body><form action="DealwithUpload.jsp" method="post" enctype="multipart/form-data"><input type="file" name="file" size="50"><input type = "soumi" name = "soumi" value = "soumis"> </ form> </ body> </html>
Web.xml chemin de téléchargement de configuration
Le chemin de téléchargement peut également être écrit directement dans le code, mais la configuration est pratique ici pour la modifier.
<Touxt-Param> <Description> Emplacement pour stocker le fichier téléchargé </ Description> <Am param-Name> File-upload </ param-name> <param-value> e: // temp // </ param-valeur> </ context-Param>
Poignée JSP téléchargée
<% @ page contenttype = "text / html; charset = utf-8" linguisse = "java"%> <% @ page import = "org.apache.comons.fileupload.fileitem, org.apache.comons.comons.fileupload.sservermfactory, org.apache" %> <% @ page import = "java.io.file"%> <% @ page import = "java.util.iterator"%> <% @ page import = "java.util.list"%> <% fichier de fichier; int maxfilesize = 5000 * 1024; int maxmemsize = 5000 * 1024; StringConcyt context.getInitParameter ("File-upload"); // Obtenez le chemin de téléchargement dans le fichier de configuration String ContentType = request.getContentType (); // Renvoie le type MIME du corps de la demande if ((contentType.Contain FileItemfactory.SetSizethReshold (MaxMemSize); // Définissez le maximum Cache Factory.SetRepository (nouveau fichier ("e: // temp //")); // Définit le répertoire temporaire utilisé pour télécharger un processeur de fichiers upload upload.SetSizEup (MAXFILE); Taille maximale du téléchargement de fichiers, unité btry {list fileItems = upload.parseRequest (request); // analyse des données composites de formulaire et renvoyez une collection de fichiers, afin que plusieurs fichiers puissent être téléchargés en une fois itérateur i = fileIt.iterator (); out.println (<html> "); Fichier upload </Title> "); out.println (" </head> "); out.println (" <body> "); // traverse le fichier téléchargé while (i.hasnext ()) {fileItem fi = (fileItem) i.next (); if (! Fi.isformfield ()) // if est le type de fichier de télécharge fi.getFieldName();//Return fileString fileName = fi.getName();//Return the upload file name, here you can check whether the uploaded file suffix is legal, use String's endWith() to boolean isInMemory = fi.isInMemory();//Long sizeInBytes = fi.getSize();//Return the file size//Start write to the file, the file name is un personnalisable if (filename.LastIndexof ("//")> = 0) {file = new File (filepath, filename.substring (fileName.LastIndexof ("//")));} else {file = new File (filepath, filename.substring (fileName.LastIndexof ("//") + 1); ; out.println ("nom de fichier téléchargé:" + filepath + filename + "<br>");}} out.println ("</ body>"); out.println ("</html>");} catch (exception ex) {System.out.println (ex);}} else {out.println ("<html>"); out.println ("<adread>"); out.println ("<Title> servlet upload </itle>"); out.println ("</-head>"); Out.println ("<pod body>"); Out.println ("P> Filed. Téléchargé </p> "); out.println (" </gody> "); out.println (" </html> ");}%>2. Téléchargement de fichiers
La référence de téléchargement de fichiers sur le blog de Gushan Canglang, qui a été écrite en détail et a été utilisée directement.
L'idée de base du téléchargement est: Traverser d'abord tous les fichiers dans le répertoire de téléchargement, puis les afficher sur la page, le client fait une demande de téléchargement et le serveur répond au téléchargement.
Liste tous les fichiers dans le répertoire de téléchargement:
classe publique ListFileServlet étend HttpServlet {public void doGet (httpservletRequest request, httpservletSponse tsorm) lance ServletException, ioException {// Obtenez le répertoire pour télécharger le fichier String uploadFilePath = this.getServletContext (). Map <string, string> filenamemap = new hashmap <string, string> (); // traverser récursivement tous les fichiers et répertoires dans le répertoire filepath et stocker le nom de fichier du fichier dans le fichier de collection de cartes (nouveau fichier (uploadFilePath), filenamemap); // file peut représenter soit un fichier ou un répertoire // la collection de cartes sur la liste de lin request.setAttribute ("filenamemap", filenamemap); request.getRequestDispatcher ("/ listfile.jsp"). listfile (fichier file, map <string, string> map) {// si le fichier ne représente pas un fichier, mais un répertoire if (! file.isfile ()) {// lister tous les fichiers et répertoires de ce répertoire fichiers de fichiers [] = file.listFiles (); // transtrontorse fichiers [] array pour (fichier f: fichiers) {// Récursifs listerfile (f, f, f, f, map);}}} else {Nom. Le fichier téléchargé est renommé sous la forme du nom UUID_FILE. Supprimez l'UUID_PART du fichier Nom File.getName (). Indexof ("_") Pour récupérer l'emplacement du caractère "_" dans la chaîne. Si le nom de fichier est similaire à: 9349249849-88343-8344_a_fan_davi.avi, alors file.getName (). Substring (file.getname (). Indexof ("_") + 1) peut obtenir la pièce A_FAN_DAVI.avi (String RealName = file.getName (). substring (file.getName (). indexof ("_") + 1); // file.getName () obtient le nom d'origine du fichier. Ce nom est unique, il peut donc être utilisé comme clé. RealName est le nom traité. Il peut être répété map.put (file.getName (), realName);}} public void doPost (httpservletRequest request, httpservletResponse réponse) lève Servlexception, ioException {doget (request, réponse);}}Ici, je parle brièvement de la méthode ListFile dans ListFileServlet. La méthode ListFile est utilisée pour répertorier tous les fichiers du répertoire. La méthode ListFile utilise la récursivité. Dans le développement réel, nous allons certainement créer une table dans la base de données, qui stockera le nom de fichier téléchargé et le répertoire de stockage spécifique du fichier. Nous pouvons connaître le répertoire de stockage spécifique du fichier en interrogeant le tableau, et il n'est pas nécessaire d'utiliser des opérations de récursivité. Cet exemple est dû au fait que la base de données ne stocke pas le nom du fichier téléchargé et l'emplacement de stockage spécifique du fichier, et l'emplacement de stockage du fichier téléchargé est utilisé pour briser le stockage, donc une récursivité est nécessaire. Pendant la récursivité, le nom de fichier obtenu est stocké dans la collection de cartes passée de l'extérieur vers la méthode ListFile, afin que nous puissions nous assurer que tous les fichiers sont stockés dans la même collection de cartes.
Configurer ListFileservlet dans le fichier web.xml
<Serplet> <Servlet-Name> listfileservlet </ servlet-name> <servlet-class> me.gacl.web.controller.listfileservlet </ servlet-class> </ servlet> <servlet mappant> <sterlet-name> listfileservlet </vrelet-name> <url-Pattern> / servlet / listfileservlet </rattern> <url-pattern> / Servlett
La page listfile.jsp affichant le fichier téléchargé est la suivante:
<% @ page Language = "Java" import = "java.util. *" pageencoding = "utf-8"%> <% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <! Doctype html> <html> <read> Page </ title> </ head> <body> <! - Traverse Map Collection -> <c: foreach var = "me" items = "$ {filenamemap}"> <c: url value = "/ servlet / downloadservlet" var = "dowrl"> <c: param name = "filename" Value = "$ {me.key}"> </ c: param> </ c: url> $ {me.value} <a href = "$ {downurl}"> télécharger </a> <br/> </c: foreach> </ body> </html>Implémenter le téléchargement des fichiers
Package Me.gacl.web.Controller; Import Java.io.file; Importer java.io.fileInputStream; Importer java.io.ioException; Importer Java.io.outputStream; Importer Java.net.Urlencoder; Javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletResponse; public Class DownloadServlet étend httpservlet {public void Doget (httpServletRequest demande, httpservletResponse Response) Téléchargement de la chaîne de servants, ioexception {// gamme le nom de file pour téléchargement de SERVLEXException, Ioexception {// Get the Fivel Name Towrows ServletException, ioexception {// Get The Fibsta = request.getParameter ("nom de fichier"); //23239283-92489-Avatar.aviFileName = new String (filename.getBytes ("iso8859-1"), "utf-8"); // Les fichiers téléchargés sont enregistrés dans le sous-répertoire de / web-inf / upload string string string FilesAverOotpath = this.getServletContext (). getRealPath ("/ web-inf / upload"); // découvrez le répertoire où le fichier est situé par le nom de file String Path = FindFilesAavePathByFileName (FileName, FilesAverOotPath); // Obtenez le fichier de fichier téléchargé Fichier = New Fichier (chemin + "//" + filename); if (! file.exists ()) {request.setAttribute ("message", "La ressource que vous souhaitez télécharger a été supprimée !!"); request.getRequestDispatcher ("/ message.jsp"). Browser pour télécharger le fichier réponse.sethEader ("Content-Disposition", "pièce jointe; filename =" + urlencoder.encode (realName, "utf-8")); // lisez le fichier à télécharger et enregistrez-le dans le flux de fichier FileInputStream dans = new FileInputStream (path + "//" + filename); // créer le StreetStream OutStream OUT = " Response.getOutputStream (); // Créer le tampon Byte Byte [] = nouveau octet [1024]; int len = 0; // LOOP LIRE LE CONTENTION DU STREET D'ENTRÉE DANS LE BUFFER WHOT ((LEN = IN.READ (Buffer))> 0) {// Sortie le contenu du buffer); in.close (); // Fermez le flux de sortie out.close ();} / *** @Method: findFilesAvePathByFileName * @Description: Recherchez le nom du fichier à télécharger * @Param SaverootPath The Root Directory the Filewing the Filed du fichier à télécharger * / public string findFilesAvePathByFileName (String filename, String SaverootPath) {int hashcode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15int dir2 = (HashCode & 0xf0) >> 4; // 0-15String dir = SaverootPath + "//" + dir1 + "//" + dir2; // upload / 2/3 upload / 3 / 5File file = new File (dir); if (! file.exists ()) {// Créer un répertoire file.mkDirs ();} return dir;} public void dopost (httpServletRequest request, httpservletSponse réponse) lance Servicexception, ioException {DOGT (requête, réponse);}}Configuration du fichier téléchargeux dans le fichier web.xml
<VerTlet> <Servlet-Name> Téléchargementservlet </ servlet-name> <servlet-class> me.gacl.web.controller.downloadservlet </ servlet-class> </ servlet> <servlet-mapping> <Servlet-Name> téléchargement devlet </ servlet-name> <url-mappage> / servlet / téléchargement de servil </url-prattern> </ serf de servlet>
Ce qui précède est les connaissances pertinentes sur le téléchargement et le téléchargement des fichiers Javaweb qui vous sont présentés par l'éditeur. J'espère que cela vous sera utile.