English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JSP kann zusammen mit HTML-Form-Tag verwendet werden, um es dem Benutzer zu erlauben, Dateien auf den Server hochzuladen. Hochgeladene Dateien können Textdateien, Bilddateien oder jede Art von Dokument sein.
In diesem Kapitel verwenden wir Servlets, um Datei-Uploads zu verarbeiten. Die verwendeten Dateien sind:
upload.jsp : Formular für den Datei-Upload.
message.jsp : Seite, zu der nach dem Upload weitergeleitet wird.
UploadServlet.java : Servlet zur Upload-Bearbeitung.
Benötigte jar-Datei: commons-fileupload-1.3.2、commons-io-2.5.jar.
Das Strukturdiagramm ist wie folgt dargestellt:
Im Folgenden erläutern wir detailliert.
Der folgende HTML-Code erstellt ein Formular für die Datei-Upload. Beachten Sie folgende Punkte:
表单 method 属性应该设置为 POST Method, das GET-Verfahren nicht verwenden kann.
表单 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 Implementierungsklasse UploadServlet */ // Wenn web.xml nicht konfiguriert ist, kann der folgende Code verwendet werden // @WebServlet("/UploadServlet) public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; // Speicherort für hochgeladene Dateien private static final String UPLOAD_DIRECTORY = "upload"; // Upload-Konfiguration 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 /** * Daten hochladen und Dateien speichern */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Überprüfen Sie, ob es sich um eine Multimediadateiübergabe handelt if (!ServletFileUpload.isMultipartContent(request)) { // Wenn dies nicht der Fall ist, wird der Prozess gestoppt]} PrintWriter writer = response.getWriter(); writer.println("Fehler: Das Formular muss enctype=multipart enthalten");/form-data"); writer.flush(); return; } // Konfigurieren Sie die Upload-Parameter DiskFileItemFactory factory = new DiskFileItemFactory(); // Setzen Sie den Schwellenwert des Speichers - Übersteigt der Speicher, wird ein temporäres Datei und gespeichert im temporären Verzeichnis factory.setSizeThreshold(MEMORY_THRESHOLD); // Setzen Sie den temporären Speicherort factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // Setzen Sie den maximalen Dateiuploadwert upload.setFileSizeMax(MAX_FILE_SIZE); // Setzen Sie die maximale Anfragegröße (inklusive Datei und Formulardaten) upload.setSizeMax(MAX_REQUEST_SIZE); // Chinese Processing upload.setHeaderEncoding("UTF-8"; // Erstellen Sie einen temporären Pfad, um hochgeladene Dateien zu speichern // Dieser Pfad ist relativ zum Verzeichnis der aktuellen Anwendung String uploadPath = getServletContext().getRealPath("/) + File.separator + UPLOAD_DIRECTORY; // Wird der Ordner nicht existieren, wird er erstellt File uploadDir = new File(uploadPath); Wenn (!uploadDir.exists()) { uploadDir.mkdir(); } try { // Daten des Anfrageinhalts extrahieren, um Dateidaten zu analysieren @SuppressWarnings("unchecked") List<FileItem> formItems = upload.parseRequest(request); Wenn (formItems != null && formItems.size() > 0) { // Durchlaufen Sie die Formulardaten for (FileItem item : formItems) { // Verarbeiten Sie die Felder, die nicht im Formular enthalten sind if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String filePath = uploadPath + File.separator + fileName; File storeFile = new File(filePath); // Geben Sie den Uploadpfad auf der Konsole aus System.out.println(filePath); // Speichern Sie die Datei auf der Festplatte item.write(storeFile); request.setAttribute("message", "Datei-Upload erfolgreich!"); } } } } catch (Exception ex) { request.setAttribute("message", "Fehlermeldung: " + ex.getMessage()); } // Springen Sie zu message.jsp getServletContext().getRequestDispatcher("/message.jsp).forward( request, response); } }
message.jsp Datei-Code wie folgt:
<%@ 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>Datei-Upload-Ergebnis</title> </head> <body> <center> <h2${message}</h2> </center> </body> </html>
Kompilieren Sie den obigen Servlet UploadServlet und erstellen Sie die erforderlichen Einträge im web.xml-Datei, wie folgt:
<?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>
现在尝试使用您在上面创建的HTML表单来上传文件。当您在浏览器中访问:http://localhost:8080/TomcatTest/upload.jsp,演示如下所示: