Les exemples de cet article partagent le téléchargement de fichiers et téléchargez le code d'implémentation Java pour votre référence. Le contenu spécifique est le suivant
réception:
1. Méthode de soumission: Post
2. Il y a des éléments de formulaire de fichiers dans le formulaire: <entrée type = "fichier" />
3. Spécifiez le type de formulaire:
Type par défaut: ENCTYPE = "Application / X-WWW-FORM-URLENCODED"
Type de téléchargement de fichiers: multipartiner / formulaire de forme
Fileupload
Il est couramment utilisé dans le développement de la fonction de téléchargement de fichiers, et Apache fournit également des composants de téléchargement de fichiers!
Composant de charge de fichiers:
1. Téléchargez le code source
2. Introduire des fichiers JAR dans le projet
Commons-fileupload-1.2.1.jar [package Jar de base du composant de téléchargement de fichiers]
Commons-io-1.4.jar [Classes d'outils liées à la broderie pour le traitement de fichiers]
utiliser:
classe publique UploadServlet étend HttpServlet {// Upload Directory, Enregistrez les ressources téléchargées publiques void doget (httpservletRequest Response HttpservletResponse) lance le composant de téléchargement de fichiers: File-téléchargement de fichiers ************************** factory = nouveau diskfileItemfactory (); // 2. Créer un fichier Téléchargement de la classe d'outils Core ServletFileUpload upload = new ServletFileUpload (Factory); // 1. Définissez la taille maximale autorisée pour un seul fichier: 30m upload.setFileSizEmax (30 * 1024 * 1024); // 2. Définissez la taille totale autorisée pour le formulaire de téléchargement de fichiers: 80m upload.setSizemax (80 * 1024 * 1024); // 3. Définissez le codage du nom de fichier de formulaire de téléchargement // équivalent à: request.SetcharAtterencoding ("utf-8"); upload.setheDereencoding ("UTF-8"); // 3. Déterminez: si le formulaire actuel est un formulaire de téléchargement de fichiers if (upload.ismulTipartContent (request)) {// 4. Convertir les données demandées en objets FileItem, puis encapsuler list <FeleItem> list = upload.parserequest (request); // Traversal: Obtenez chaque données téléchargées pour (FileItem Item: List) {// Jugement: Données de texte normal if (item.isformField ()) {// String de données de texte normal FieldName = item.getFieldName (); // Nom de l'élément de formulaire String contenu = item.getString (); // Nom de l'élément de formulaire, données correspondantes //item.getString("utf-8 "); Spécifiez le System.out.out.println (FieldName + "" + Contenu); } // File de téléchargement (flux de fichiers) ---> Téléchargez dans le répertoire de téléchargement else {// String de données de texte normal FieldName = item.getFieldName (); // Nom de l'élément de formulaire Nom de chaîne = item.getName (); // Nom de fichier String contenu = item.getString (); // Nom de l'élément de formulaire, Type de chaîne de données correspondant = item.getContentType (); // Type de fichier InputStream dans = item.getInputStream (); // Télécharger le flux de fichiers / * * 4. Le nom du fichier est renommé * pour différents utilisateurs readme.txt, ne veulent pas être écrasés! * Traitement d'arrière-plan: ajoutez une balise unique à l'utilisateur! */ // un. Générez de manière aléatoire une chaîne de balise unique id = uuid.randomuuid (). ToString (); // b. Splice Nom avec le nom de fichier = id + "#" + name; // Obtenez le chemin de base de la chaîne de base de base = getServletContext (). GetRealPath ("/ upload"); // Créer le fichier de fichier cible Fichier = nouveau fichier (chemin, nom); // classe d'outils, fichier téléchargement item.write (fichier); item.delete (); // Supprimer le fichier temporaire généré par le système System.out.println (); }}} else {System.out.println ("Le formulaire actuel n'est pas un formulaire de téléchargement de fichiers, le traitement a échoué!"); }} catch (exception e) {e.printStackTrace (); }} // L'implémentation manuelle du processus privé void upload (httpsservletRequest request) lève ioException, unportdedencodingException {/ * request.getParameter (""); // get / post request.getQueryString (); // obtient les données soumises par get request.getInputStream (); // Obtenez les données soumises par post * / / ****************** Obtenez manuellement les données du formulaire de téléchargement de fichiers *********** / // 1. Obtenir Form Data Stream InputStream dans = request.getInputStream (); // 2. Convertir Stream InputStreamReader InsideRam = new inputStreamReader (in, "utf-8"); // 3. BufferedReader Reader = new BufferedReader (Instream); // String de données de sortie str = null; while ((str = reader.readline ())! = null) {System.out.println (str); } // String de données de sortie str = null; while ((str = reader.readline ())! = null) {System.out.println (str); } // close reader.close (); instream.close (); joindre(); } public void doPost (requête httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {this.doget (request, réponse); }}Cas:
Index.jsp
<body> <a href = "$ {pagecontext.request.contextPath} /upload.jsp"> File upload </a> <a href = "$ {pagecontext.request.contextPath} / fileservlet? Method = downList"> Fichier Download </a> </ body>Upload.jsp
<body> <form name = "frm_test" action = "$ {pageContext.request.contextPath} / fileservlet? Method = upload" metheth = "post" enctype = "multipart / form-data"> <% - <entrée type = "HIDDEN" name = "Method" value = "upload"> -%> username: <puty type = "Text" Name = "username"> <brye <input type = "file" name = "file_img"> <br/> <input type = "soumi" value = "soumi"> </ form> </body>Fileservlet.java
/ ** * Gire le téléchargement de fichiers et le téléchargement * @author jie.yuan * * / public class fileserservlet étend httpservlet {public void doget (httpservletRequest request, httpservletResponse réponse) lance Servlexception, ioException {// procurer les paramètres de demande: distinguer différents types d'opération de méthode string = request.getParamet ("" méthode "); if ("upload" .equals (méthode)) {// Télécharger le téléchargement (demande, réponse); } else if ("downlist" .equals (méthode)) {// Entrez la liste de téléchargement downlist (request, réponse); } else if ("down" .equals (méthode)) {// Télécharger Down (demande, réponse); }} / ** * 1. Upload * / private void upload (httpsservletRequest request, httpservletResponse réponse) lève ServletException, ioException {try {// 1. Créer un objet d'usine FileItemFactory Factory = new DiskFileItemFactory (); // 2. Fichier Téléchargez la classe d'outils de base ServletFileUpload upload = new ServletFileUpload (Factory); // Définir les paramètres de limite de taille upload.setFileSizEMax (10 * 1024 * 1024); // Limite de taille de fichier unique upload.setsiSizEMAX (50 * 1024 * 1024); // Limite de la taille du fichier total upload.sethEnerEncoding ("UTF-8"); // Traitement Encoding de fichiers chinois // Juger if (upload.ismulTipartContent (request)) {// 3. Converti les données de la demande à la liste de collecte List <FeleItem> list = upload.parseRequest (request); // Traversal for (FileItem Item: list) {// jugement: données de texte normal if (item.isformField ()) {// Obtenez le nom de chaîne name = item.getFieldName (); // Obtenez la valeur de la valeur de la chaîne = item.getString (); System.out.println (valeur); } // Élément de formulaire de fichier Else {/ ************ Fichier Upload **************** / // a. Obtenez le nom de fichier String name = item.getName (); // --- gérer le problème du téléchargement de nom de fichier Duplicate Nom ---- // a1. Obtenez la chaîne de marque unique id = uUid.randomuuid (). ToString (); // A2. Splice Nom du fichier Nom = id + "#" + name; // b. Obtenez la chaîne de téléchargement de téléchargement BasEpath = getServletContext (). GetRealPath ("/ upload"); // c. Créez l'objet de fichier à télécharger File File = nouveau fichier (basepath, nom); // d. Télécharger item.write (fichier); item.delete (); // supprime le fichier temporaire généré lorsque le composant exécute}}}}} catch (exception e) {e.printStackTrace (); }} / ** * 2. Entrez la liste de téléchargement * / private void downlist (httpsservletRequest request, httpservletResponse réponse) lance ServletException, ioException {// IDEA IDÉDICE: Obtenez d'abord les noms de fichiers de tous les fichiers dans le répertoire de téléchargement, puis enregistrer; Sautez sur la liste Down.jsp pour afficher // 1. Initialiser la carte de la collection de cartes <nom de fichier contenant des balises uniques, le nom de fichier court>; Map <string, string> fileNames = new HashMap <String, String> (); // 2. Obtenez le répertoire de téléchargement et les noms de fichiers de tous les fichiers sous String Bathpath = getServletContext (). GetRealPath ("/ upload"); // fichier de fichier de répertoire = nouveau fichier (bain de bain); // Dans le répertoire, tous les noms de fichiers Liste de chaîne [] = file.list (); // Traversal, encapsule if (list! = Null && list.length> 0) {for (int i = 0; i <list.length; i ++) {// name complet fileName = list [i]; // Short Name String shortname = filename.substring (filename.lastIndexof ("#") + 1); // encapsule filenames.put (nom de fichier, shortname); }} // 3. Enregistrer pour demander le domaine request.setAttribute ("nom de fichiers", noms de fichiers); // 4. Forward request.getRequestDispatcher ("/ downlist.jsp"). Forward (demande, réponse); } / ** * 3. Gire Download * / private void down (httpServLetRequest request, httpservletResponse réponse) lance ServletException, ioException {// Obtenez le nom de fichier téléchargé par l'utilisateur (data annexe après l'adresse URL, get) string filename = request.getParamet ("filename"); filename = new String (filename.getBytes ("ISO8859-1"), "UTF-8"); // Obtenez la chaîne de chemin de répertoire de téléchargement BasEpath = getServletContext (). GetRealPath ("/ upload"); // obtient un flux de fichier inputStream dans = new FileInputStream (nouveau fichier (basepath, nom de fichier)); // Si le nom de fichier est chinois, le codage de l'URL doit être effectué filename = urlencoder.encode (nom de fichier, "utf-8"); // Définissez l'en-tête de réponse pour Télécharger Response.sethEader ("Content-Disposition", "Pixe; FileLame =" + FileName); // Obtenir la réponse Byte Stream OutputStream Out = Response.getOutputStream (); octet [] b = nouveau octet [1024]; int len = -1; while ((len = in.read (b))! = -1) {out.write (b, 0, len); } // close out.close (); joindre(); } public void doPost (requête httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {this.doget (request, réponse); }}Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.