English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Les Servlet peuvent être utilisées avec les balises HTML form pour permettre aux utilisateurs de télécharger des fichiers sur le serveur. Les fichiers téléchargés peuvent être des fichiers texte, des fichiers images ou tout type de document.
Les fichiers utilisés dans cet article sont :
upload.jsp : Formulaire de téléchargement de fichier.
message.jsp : Page de redirection après le téléchargement réussi.
UploadServlet.java : Servlet de traitement du téléchargement.
Les fichiers jar à inclure : commons-fileupload-1.3.2、commons-io-2.5.jar.
Le schéma de structure est comme suit :
Attention :Servlet30 est déjà intégré avec la fonction de téléchargement de fichier, les développeurs n'ont plus besoin d'importer le composant Commons FileUpload dans le projet.
Nous allons maintenant en détail.
Le code HTML suivant crée un formulaire de téléchargement de fichier. Voici quelques points à noter :
表单 méthode 属性应该设置为 POST La méthode ne peut pas utiliser la méthode GET.
表单 enctype 属性应该设置为 multipart/form-data.
表单 action 属性应该设置为在后端服务器上处理文件上传的 Servlet 文件。下面的示例使用了 UploadServlet Servlet 来上传文件。
上传单个文件,您应该使用单个带有属性 type="file" 的 <input .../> 标签。为了允许多个文件上传,请包含多个 name 属性值不同的 input 标签。输入标签具有不同的名称属性的值。浏览器会为每个 input 标签关联一个浏览按钮。
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="Content-Type" content="text/html; charset=UTF-8"> <title>文件上传示例 - 基础教程网</title> </head> <body> <h1>文件上传示例 - 基础教程网</h1> <form method="post" action="/TomcatTest/UploadServlet" enctype="multipart/form-data"> 选择一个文件: <input type="file" name="uploadFile" /> <br/><br/> <input type="submit" value="上传" /> </form> </body> </html>
以下是 UploadServlet 的源代码,用于处理文件上传,在这之前我们先确保依赖包已经引入到项目的 WEB-INF/lib 目录下:
下面的示例依赖于 FileUpload,所以一定要确保在您的 classpath 中有最新版本的 commons-fileupload.x.x.jar 文件。可以从 http://commons.apache.org/proper/commons-fileupload/ 下载。
FileUpload 依赖于 Commons IO,所以一定要确保在您的 classpath 中有最新版本的 commons-io-x.x.jar 文件。可以从 http://commons.apache.org/proper/commons-io/ 下载。
你可以直接下载本站提供的两个依赖包:
UploadServlet 的源代码如下所示:
package com.w;3codebox.test; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import 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; /** * Servlet implémentation classe UploadServlet */ @WebServlet("/UploadServlet) public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; // Répertoire de stockage des fichiers téléversés private static final String UPLOAD_DIRECTORY = "upload"; // Configuration de téléversement private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; // 3MB private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB /** * Téléversement des données et sauvegarde des fichiers */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Vérification si c'est un téléversement multimédia if (!ServletFileUpload.isMultipartContent(request)) { // sinon arrêter}} PrintWriter writer = response.getWriter(); writer.println("Erreur : Le formulaire doit contenir enctype=multipart/form-data"); writer.flush(); return; } // Configurer les paramètres de téléchargement DiskFileItemFactory factory = new DiskFileItemFactory(); // Définir la valeur critique de la mémoire - Créer un fichier temporaire et le stocker dans le répertoire temporaire une fois dépassé factory.setSizeThreshold(MEMORY_THRESHOLD); // Définir le répertoire de stockage temporaire factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // Définir la valeur maximale de téléchargement de fichier upload.setFileSizeMax(MAX_FILE_SIZE); // Définir la valeur maximale de la requête (comprend les fichiers et les données du formulaire) upload.setSizeMax(MAX_REQUEST_SIZE); // Traitement des caractères chinois upload.setHeaderEncoding("UTF-8"); // Construire un chemin temporaire pour stocker les fichiers téléchargés // Ce chemin est relatif au répertoire de l'application actuelle String uploadPath = request.getServletContext().getRealPath("./) + File.separator + UPLOAD_DIRECTORY; // Si le répertoire n'existe pas, le créer File uploadDir = new File(uploadPath); si (!uploadDir.exists()) { uploadDir.mkdir(); } try { // Analyser le contenu de la requête pour extraire les données de fichier @SuppressWarnings("unchecked") List<FileItem> formItems = upload.parseRequest(request); si (formItems != null && formItems.size() > 0) { // Itérez sur les données du formulaire for (FileItem item : formItems) { // Traitez les champs qui ne se trouvent pas dans le formulaire if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String filePath = uploadPath + File.separator + fileName; File storeFile = new File(filePath); // Affichez le chemin d'accès au fichier téléversé dans la console System.out.println(filePath); // Enregistrez le fichier sur le disque dur item.write(storeFile); } "Téléversement de fichier réussi !"); } } } catch (Exception ex) { } request.setAttribute("message", + "Erreur : " } // ex.getMessage()); Redirigez vers message.jsp/request.getServletContext().getRequestDispatcher(" request, response); } }
message.jsp Le code du fichier est le suivant :
<%@ 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="Content-Type" content="text/html; charset=UTF-8"> <title>Résultat du téléversement de fichier</title> </head> <body> <center> <h2${message}</h2> </center> </body> </html>
Compilé le Servlet UploadServlet ci-dessus et créez les entrées nécessaires dans le fichier web.xml comme suit :
<?xml version="1.0" encoding="UTF"-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <display-name>UploadServlet</display-name> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.w3codebox.test.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/TomcatTest/UploadServlet</url-pattern> </servlet-mapping> </web-app>
Essayez maintenant d'utiliser le formulaire HTML créé ci-dessus pour télécharger un fichier. Lorsque vous accédez à : http://localhost:8080/TomcatTest/upload.jsp , comme démontré ci-dessous :