Dans le développement du système d'applications Web, les fonctions de téléchargement de fichiers et de téléchargement sont des fonctions très couramment utilisées. Aujourd'hui, parlons de l'implémentation des fonctions de téléchargement et de téléchargement de fichiers dans Javaweb.
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, ou il peut être trouvé sous le dossier Lib de Struts. La fonction du téléchargement de Struts est basée sur cette implémentation. Common-FileUpload dépend du package Common-IO, vous devez donc également télécharger ce package.
1. Construction de l'environnement de développement
Créez un projet FileUploadAndDownload et ajoutez le package JAR du composant de fichier Commons-FileUpload d'Apache, comme indiqué dans la figure ci-dessous:
2. Implémentez le téléchargement de fichiers
2.1. Page de téléchargement de fichiers et page d'invite de messages
Le code de la page upload.jsp est le suivant:
<% @ Page Language = "Java" Pageencoding = "UTF-8"%> <! DocType HTML> <Html> <A-Head> <Title> Fichier Upload </Title> </ Head> <Body> <Form Action = "$ {PageConText.request.ContextPath} / Servlet / uploplowleServer" ENCTYPE = "Multipart / Form-Data" Utilisateur: <input type = "text" name = "username"> <br/> Téléchargez le fichier 1: <input type = "file" name = "file1"> <br/> upload file 2: <input type = "file" name = "file2"> <br/> <entrée = "soumettre" value = "soumettre"> </ form> </ body> </html> La copie du code pour le message. Imprimer? <% @ Page Language = "Java" Pageencoding = "UTF-8"%> <! Doctype html> <html> <adread> <itle> invite de message </title> </ head> <body> $ {message} </ body> </html>2.2. Traitement des servlets pour les téléchargements de fichiers
Le code de téléchargement Handleservlet est le suivant:
Package me.gacl.web.Controller; Importer java.io.file; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.inputStream; Importer java.util.list; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileItem; import org.apache.commons.fileupload.disk.diskfileItemfactory; import org.apache.commons.fileupload.servlet.servletFileUpload; classe publique UploadHandleServlet étend HttpServlet {public void doGet (HttpServletRequest Request, HttpservletResponse Response) lance ServletException, ioException {// Obtenez le répertoire enregistré du fichier téléchargé, stockez le fichier téléchargé dans le répertoire Web-Inf, et ne permet pas à l'accès direct du monde extérieur de this.getServletContext (). getRealPath ("/ web-inf / upload"); Fichier fichier = nouveau fichier (sauvegarde); // juger si le répertoire enregistré du fichier téléchargé existe si (! File.exists () &&! File.isdirectory ()) {System.out.println (SavePath + "Le répertoire n'existe pas, il doit être créé"); // Créer le répertoire File.mkdir (); } // invite le message String Message = ""; Essayez {// Utilisez le composant de téléchargement de fichiers Apache pour gérer les étapes de téléchargement de fichiers: // 1. Créez une usine DiskFileItemFactory DiskFileItemFactory Factory = new DiskFileItemFactory (); // 2. Créer un fichier Téléchargement PARSER ServletFileUpload upload = new ServletFileUpload (Factory); // Résolvez le téléchargement chinois brouillé.sethEnerencoding ("UTF-8"); // 3. Déterminez si les données soumises sont les données du formulaire de téléchargement if (! ServletFileUpload.ismulTipartContent (request)) {// Obtenez des données renvoyant de la manière traditionnelle; } // 4. Utilisez l'analyseur ServletFileUpload pour analyser les données téléchargées. Le résultat de l'analyse renvoie une collection List <FichierItem>. Chaque fichieritem correspond à l'élément d'entrée d'un formulaire de formulaire Liste <FileItem> list = upload.PaSeRequest (request); for (FileItem Item: list) {// Si les données d'un élément d'entrée normal sont encapsulées dans le fichieritem if (item.isformField ()) {String name = item.getFieldName (); // Résoudre le problème chinois brouillé des données des éléments d'entrée ordinaires Valeur de chaîne = item.getString ("UTF-8"); // Value = new String (value.getBytes ("ISO8859-1"), "UTF-8"); System.out.println (nom + "=" + valeur); } else {// Si l'élément de fichier résume le fichier téléchargé // Obtenez le nom de fichier téléchargé, String filename = item.getName (); System.out.println (nom de fichier); if (filename == null || filename.trim (). equals ("")) {continuant; } // Remarque: Les noms de fichiers soumis par différents navigateurs sont différents. Certains navigateurs soumettent des fichiers avec des chemins, tels que: c: /a/b/1.txt, et certains ne sont que des noms de fichiers simples, tels que: 1.txt // traitez la partie Chemin du nom du fichier du fichier téléchargé obtenu, seule la pièce de nom de fichier est retenue FileName = filename.substring (filename.lastindexof ("//") + 1); // Obtenez le flux d'entrée du fichier téléchargé dans l'élément inputStream dans = item.getInputStream (); // Créer un flux de sortie de fichier FileOutputStream out = new FileOutputStream (SavePath + "//" + FileName); // Créer un tampon d'octet de tampon [] = nouveau octet [1024]; // L'identification de la lecture des données dans le flux d'entrée est INT LEN = 0; // Le flux d'entrée est lu dans la boucle de tampon, (len = in.read (tampon))> 0 signifie qu'il y a encore des données dans while ((len = in.read (tampon))> 0) {// Utilisez un flux de sortie FileOutputStream pour écrire les données de tampon dans le répertoire spécifié (SAVEPATH + "//" + nom de fichier) out.write (tampon, 0, Len); } // Fermez le flux d'entrée dans.close (); // Fermez le flux de sortie Out.close (); // Supprimer le fichier temporaire généré lors du traitement du fichier téléchargement item.delete (); Message = "Le téléchargement de fichiers a été téléchargé avec succès!"; }}}} catch (exception e) {message = "File upload a échoué!"; e.printStackTrace (); } request.setAttribute ("message", message); request.getRequestDispatcher ("/ message.jsp"). Forward (demande, réponse); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {doget (request, réponse); }}Enregistrez Téléchargement HandleServlet dans le fichier web.xml
<VerTlet> <Servlet-Name> uploadHandleServlet </ Servlet-Name> <Servlet-Class> me.gacl.web.controller.uploadHandleServlet </ Servlet-Class> </ Servlet> <Servlet Mapping> <Servlet-Name> uploadHandleservlet </vret-name> <Url-Pattern> </ serflet-mapping>
L'effet de fonctionnement est le suivant:
Une fois le fichier téléchargé avec succès, le fichier téléchargé est enregistré dans le répertoire de téléchargement sous le répertoire Web-Inf, comme indiqué dans la figure ci-dessous:
2.3. Détails du téléchargement de fichiers
Bien que le code ci-dessus puisse télécharger avec succès les fichiers dans le répertoire spécifié sur le serveur, il existe de nombreux petits détails qui doivent être prêts attention dans la fonction de téléchargement de fichiers. Les points suivants devraient être accordés une attention particulière.
1. Pour garantir la sécurité du serveur, les fichiers de téléchargement doivent être placés dans un répertoire qui ne peut pas être directement accessible par le monde extérieur, comme dans le répertoire Web.
2. Pour éviter l'écrasement du fichier, un nom de fichier unique doit être généré pour télécharger le fichier.
3. Pour empêcher trop de fichiers d'apparaître sous un répertoire, vous devez utiliser l'algorithme de hachage pour briser le stockage.
4. La valeur maximale des fichiers téléchargés doit être limitée.
5. Pour limiter le type de fichiers téléchargés, lors de la réception du nom du fichier téléchargé, déterminez si le nom du suffixe est légal.
En réponse aux 5 problèmes détaillés ci-dessus, améliorons le Téléchargez Handleservlet. Le code amélioré est le suivant:
Package me.gacl.web.Controller; Importer java.io.file; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.inputStream; Importer java.util.list; import java.util.uuid; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileItem; import org.apache.commons.fileupload.fileuploadbase; import org.apache.commons.fileupload.progressListener; import org.apache.commons.fileupload.disk.diskfileItemfactory; import org.apache.commons.fileupload.servlet.servletFileUpload; / ** * @className: uploadHandleServlet * @Description: Todo (j'utilise une phrase pour décrire la fonction de cette classe) * @Author: Garantie CanGlang * @Date: 2015-1-3 11:35:50 PM * * Public Class UploadHandleServlet étend httservlet {public Void Doget) ServletException, ioException {// Obtenez le répertoire enregistré du fichier téléchargé, stockez le fichier téléchargé dans le répertoire Web-Inf et n'autorise pas l'accès direct à partir du monde extérieur pour assurer la sécurité des fichiers téléchargés string SavePath = this.getservletContext (). GetRealPath ("/ web-inf / upload"); // Le fichier temporaire généré pendant le téléchargement est enregistré par la chaîne de répertoire temppath = this.getServletContext (). GetRealPath ("/ web-inf / temp"); Fichier tmpfile = nouveau fichier (TEMPPATH); if (! tmpfile.exists ()) {// Créer un répertoire temporaire tmpfile.mkdir (); } // Le message invite la chaîne Message = ""; Essayez {// Utilisez le composant de téléchargement de fichiers Apache pour gérer les étapes de téléchargement de fichiers: // 1. Créez une usine DiskFileItemFactory DiskFileItemFactory Factory = new DiskFileItemFactory (); // Réglez la taille du tampon de l'usine. Lorsque la taille du fichier téléchargé dépasse la taille du tampon, un fichier temporaire sera généré et stocké dans le répertoire temporaire spécifié. Factory.SetSizethReshold (1024 * 100); // Réglez la taille du tampon à 100KB. Si elle n'est pas spécifiée, la taille du tampon est de 10 Ko par défaut. // Définissez le répertoire de stockage du fichier temporaire généré lors du téléchargement factory.setRepository (tmpFile); // 2. Créer un fichier Téléchargement PARSER ServletFileUpload upload = new ServletFileUpload (Factory); // Écoutez le fichier upload progress upload.setProgressListener (new ProgressListener () {public void Update (long pbytesRead, long pcontentLength, int arg2) {System.out.println ("La taille du fichier est:" + pcontentLength + " 14608, actuellement traité: 7367 La taille du fichier est: 14608, actuellement traitée: 11419 La taille du fichier est: 14608, actuellement traitée: 14608 * /}}); // Résolvez le téléchargement chinois brouillé.sethEnerencoding ("UTF-8"); // 3. Déterminez si les données soumises sont les données du formulaire de téléchargement if (! ServletFileUpload.ismulTipartContent (request)) {// Obtenez des données renvoyant de la manière traditionnelle; } // Définissez la valeur maximale de la taille du fichier unique téléchargé, qui est actuellement définie sur 1024 * 1024 octets, c'est-à-dire 1 Mo upload.setFileSizEmax (1024 * 1024); // Définit la valeur maximale du nombre total de fichiers téléchargés, la valeur maximale = la somme des tailles maximales de plusieurs fichiers téléchargés en même temps, qui est actuellement défini sur 10 Mo upload.setSizemax (1024 * 1024 * 10); // 4. Utilisez l'analyseur ServletFileUpload pour analyser les données téléchargées. Le résultat de l'analyse renvoie une collection List <FequeItem>, chaque fichieritem correspond à l'élément d'entrée d'un formulaire de formulaire List <FequeItem> list = upload.parseRequest (request); pour (FileItem Item: list) {// Si le FileItem résume les données des éléments d'entrée ordinaires if (item.isformField ()) {String name = item.getFieldName (); // résout le problème chinois brouillé des données des éléments d'entrée ordinaires Valeur de chaîne = item.getString ("UTF-8"); // Value = new String (value.getBytes ("ISO8859-1"), "UTF-8"); System.out.println (nom + "=" + valeur); } else {// Si le fichieritem résume le fichier téléchargé // obtient le nom de fichier téléchargé, String filename = item.getName (); System.out.println (nom de fichier); if (filename == null || filename.trim (). equals ("")) {continuant; } // Remarque: Les noms de fichiers soumis par différents navigateurs sont différents. Certains navigateurs soumettent des noms de fichiers avec des chemins, tels que: c: /a/b/1.txt, tandis que certains ne sont que des noms de fichiers simples, tels que: 1.txt // traitez la partie Chemin du nom de fichier du fichier obtenu téléchargé, seule la pièce de nom de fichier est conservée filename = filename.substring (filename.lastIndexof ("//") + 1); // Obtenez l'extension de la chaîne de fichiers téléchargée fileExtName = filename.substring (filename.lastIndexof (".") + 1); // Si vous devez limiter le type de fichier téléchargé, vous pouvez utiliser l'extension de fichier pour déterminer si le type de fichier téléchargé est le système légal.out.println ("l'extension du fichier téléchargé est:" + fileExtName); // Obtenez le flux d'entrée du fichier téléchargé dans l'élément inputStream dans = item.getInputStream (); // Obtenez le nom du fichier enregistré String SaveFileName = MakeFileName (FileName); // Obtenez la chaîne de répertoire de fichier SAVE REALSAVEPATH = MakePath (SaveFileName, SavePath); // Créer un flux de sortie de fichier FileOutputStream out = new FileOutputStream (realsAvePath + "//" + SaveFileName); // Créer un tampon d'octet de tampon [] = nouveau octet [1024]; // L'identification de la détermination de la lecture des données dans le flux d'entrée est INT LEN = 0; // Le flux d'entrée est lu dans le tampon, (len = in.read (tampon))> 0 signifie qu'il y a encore des données dans while ((len = in.read (tampon))> 0) {// Utilisez le flux de sortie fileoutputStream pour écrire les données de tampon dans le répertoire spécifié (SavePath + "//" + filen) Out.write (Buffer, 0, Len); } // Fermez le flux d'entrée dans.close (); // Fermez le flux de sortie Out.close (); // Supprimer le fichier temporaire généré lors du traitement du fichier upload //item.delete (); Message = "Le téléchargement de fichiers a été téléchargé avec succès!"; }}} catch (fileuploadbase.fileSizeliteXechedEdException e) {e.printStackTrace (); request.setAttribute ("Message", "La valeur maximale d'un seul fichier est dépassée !!!"); request.getRequestDispatcher ("/ message.jsp"). Forward (demande, réponse); retour; } catch (fileUploadBase.SizeliteXechedException e) {e.printStackTrace (); request.setAttribute ("Message", "La taille totale du fichier téléchargé dépasse la valeur maximale de la limite !!!"); request.getRequestDispatcher ("/ message.jsp"). Forward (demande, réponse); retour; } catch (exception e) {message = "File upload a échoué!"; e.printStackTrace (); } request.setAttribute ("message", message); request.getRequestDispatcher ("/ message.jsp"). Forward (demande, réponse); } / ** * @Method: MakeFileName * @Description: Générez le nom de fichier du fichier téléchargé, avec le nom de fichier comme: uuid + "_" + le nom d'origine du fichier * @anthor: 发官网 * @param nom de fichier d'origine du fichier * @return uuid + "_" + le nom d'origine * / privil // Pour empêcher l'écrasement des fichiers, un nom de fichier unique doit être généré pour télécharger le fichier. Return uuid.randomuuid (). ToString () + "_" + nom de fichier; } / ** * Pour empêcher que trop de fichiers apparaissent sous un répertoire, vous devez utiliser l'algorithme de hachage pour briser le stockage * @Method: MakePath * @description: * @anthor: le répertoire de stockage solitaire et arrogant * * @param filen nom du fichier, Générer le répertoire de stockage * Basé sur le nom de fichier * @param SavePath Fichier Storage Path * FileName, String SavePath) {// Obtenez la valeur HashCode du nom du fichier, et ce que vous obtenez est l'adresse du nom de fichier d'objet String dans la mémoire int hashcode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15 int dir2 = (hashcode & 0xf0) >> 4; // 0-15 // Construire une nouvelle chaîne de répertoire de sauvegarde Dir = SavePath + "//" + dir1 + "//" + dir2; // upload / 2/3 upload / 3/5 // Le fichier peut représenter à la fois le fichier et le fichier du répertoire = nouveau fichier (dir); // Si le répertoire n'existe pas si (! File.exists ()) {// Créez le répertoire file.mkDirs (); } return dir; } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {doget (request, réponse); }}Après avoir amélioré les cinq petits détails susmentionnés, notre fonction de téléchargement de fichiers a été relativement terminée.
3. Téléchargement de fichiers
3.1. Énumérez les ressources de fichiers fournies à télécharger
Nous voulons fournir les ressources de fichiers dans le système d'application Web aux utilisateurs à télécharger. Tout d'abord, nous devons avoir une page pour répertorier tous les fichiers dans le répertoire de fichiers téléchargé. Lorsque l'utilisateur clique sur l'hyperlien de téléchargement de fichiers, il sera téléchargé et écrit un listfileservlet pour répertorier tous les fichiers téléchargés dans le système d'application Web.
Le code de ListFileservlet est le suivant:
Package me.gacl.web.Controller; Importer java.io.file; Importer java.io.ioException; import java.util.hashmap; importation java.util.map; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; / ** * @classname: listFileservlet * @Description: répertoriez tous les fichiers téléchargés dans le système Web * @Author: Garantie * @Date: 2015-1-4 9:54:40 PM * * / classe publique ListFileServlet étend Httpservlet {public Void Doget (httpsservlerest demande, ioexpens // Obtenez le répertoire de téléchargement de fichiers String uploadFilePath = this.getServletContext (). GetRealPath ("/ web-inf / upload"); // Stockage du nom de fichier à télécharger map <string, string> filenamemap = new hashmap <string, string> (); // Traversé récursivement tous les fichiers et répertoires dans le répertoire FilePath et stockez le nom de fichier du fichier dans le fichier de collection de carte (nouveau fichier (uploadFilePath), filenamemap); // le fichier peut représenter soit un fichier ou un répertoire // envoyer la collection de cartes sur la page lilename.jsp pour afficher. request.getRequestDispatcher ("/ listfile.jsp"). Forward (demande, réponse); } / ** * @Method: listFile * @Description: Traverson récursivement tous les fichiers dans le répertoire spécifié * @anthor: 光克 * @param signifie un fichier, et représente également un répertoire de fichiers * @param collection de carte de carte qui stocke les noms de fichiers * / le fichier public not if (! file.sisfile ()) {// Liste tous les fichiers et répertoires dans les fichiers de fichiers de répertoire [] = file.listFiles (); // transfert de fichiers [] array for (fichier f: fichiers) {// récursif listfile (f, map); }} else {/ ** * traitez le nom du fichier. Le fichier téléchargé est renommé sous la forme du nom UUID_FILE. Supprimez la partie UUID_ du nom de fichier 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 (httpsservletRequest request, httpservletResponse réponse) lève ServletException, 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> <hadre> <t titre> Page d'affichage de fichier </read> <html> <édite> <! - Traverse Map Collection -> <c: foreach var = "me" items = "$ {filenamemap}"> <c: url value = "/ servlet / downloadServlet" var = "downUrl"> <c: param name = "filen" value = "$ {me.key}"> </ c: param> </ c: url> $ {me.value} <a href = "$ {downUrl}"> Télécharger </a> <br/> </c: foreach> </ body> </html> En accédant à la liste ListFileServlet, vous pouvez afficher les ressources de fichier fournies aux utilisateurs à télécharger dans la page listfile.jsp, comme indiqué dans la figure ci-dessous:
3.2. Implémenter le téléchargement des fichiers
Écrivez un servlet pour le traitement des téléchargements de fichiers. Le code du téléchargement de téléchargement est le suivant:
Package me.gacl.web.Controller; Importer java.io.file; import java.io.fileInputStream; Importer java.io.ioException; import java.io.outputStream; import java.net.urlencoder; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; classe publique DownloadLoadServlet étend HttpServlet {public void doget (httpservletRequest request, httpservletResponse réponse) lance ServletException, ioException {// obtenir le nom de fichier à télécharger fileName = request.getParameter ("filename"); //23239283-92489-avatar.avi filename = new String (filename.getBytes ("iso8859-1"), "utf-8"); // Les fichiers téléchargés sont enregistrés dans le sous-répertoire du répertoire / web-inf / upload file filesAverOotootPath = this.getServletContext (). GetRealPath ("/ web-inf / upload"); // Découvrez le répertoire où le fichier est situé par le nom de file String Path = FindFilesAvePathByFileName (fichier, fichier, fichiersAverOotoTPath); // Obtenez le fichier de fichier fichier Fichier = nouveau fichier (path + "//" + nom de fichier); // Si le fichier n'existe pas si (! File.exists ()) {request.setAttribute ("Message", "La ressource que vous souhaitez télécharger a été supprimée !!"); request.getRequestDispatcher ("/ message.jsp"). Forward (demande, réponse); retour; } // Nom de fichier de traitement String realName = filename.substring (filename.indexof ("_") + 1); // Définissez l'en-tête de réponse pour contrôler le navigateur 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 dans le flux de flux de fichier FileInputStream dans = new FileInputStream (path + "//" + filename); // Créer le flux de sortie OutputStream Out = Response.getOutputStream (); // Créer le tampon d'octet de tampon [] = nouveau octet [1024]; int len = 0; // Loop Lire le contenu du flux d'entrée dans le tampon while ((len = in.read (tampon))> 0) {// Sortie le contenu du tampon au navigateur pour réaliser le fichier téléchargement out.write (tampon, 0, Len); } // Fermez le flux d'entrée de fichier dans.close (); // Fermez le flux de sortie Out.close (); } / ** * @Method: findFilesAvePathByFileName * @Description: Recherchez le chemin du fichier à télécharger via le nom de fichier et le répertoire root de stockage * @anthor: 发官网 * @param nom de fichier le nom du fichier à télécharger * @param saveroototpath le répertoire root pour le téléchargement du fichier du fichier, / web-infffre public String findFilesAvePathByFileName (String FileName, String SaverootPath) {int hashCode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15 int dir2 = (hashcode & 0xf0) >> 4; // 0-15 String Dir = SaverootPath + "//" + dir1 + "//" + dir2; // Téléchargez / 2/3 Upload / 3/5 fichier fichier = nouveau fichier (dir); if (! file.exists ()) {// Créer un répertoire file.mkDirs (); } return dir; } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {doget (request, 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 serviette </url-prattern> </ servlet>-mappat
Cliquez sur l'hyperlien [Télécharger], soumettez la demande au téléchargement de téléchargement et traitez-la pour réaliser le téléchargement du fichier. L'effet de fonctionnement est illustré dans la figure ci-dessous:
À partir des résultats en cours d'exécution, nous pouvons voir que notre fonction de téléchargement de fichiers peut télécharger des fichiers normalement.
Ce qui précède est l'explication la plus détaillée des exemples de téléchargement et de téléchargement de fichiers introduits par l'éditeur (recommandé). J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!