English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Servlet können mit HTML-Formular-Tags verwendet werden, um Benutzern das Hochladen von Dateien auf den Server zu ermöglichen. Hochgeladene Dateien können Textdateien, Bilddateien oder jede Art von Dokument sein.
Die in diesem Artikel verwendeten Dateien sind:
upload.jsp: Formular zur Dateiupload.
message.jsp: Seite, auf die nach dem Upload umgeleitet wird.
UploadServlet.java: Servlet zur Verarbeitung des Uploads.
Erforderliche jar-Datei: commons-fileupload-1.3.2、commons-io-2.5.jar
Die Struktur ist wie folgt dargestellt:
Hinweis:Servlet3Version 0.0 hat bereits die Eigenschaft des Dateiuploads integriert, und Entwickler müssen den Commons FileUpload-Komponente nicht mehr in das Projekt importieren.
Wir erläutern dies im Folgenden im Detail.
Der folgende HTML-Code erstellt ein Formular zur Dateiupload. Folgende Punkte sollten beachtet werden:
表单 method 属性应该设置为 POST Methode, das GET-Verfahren darf nicht verwendet werden.
表单 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 */ @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 /** * Übertragen Sie Daten und speichern Sie Dateien */ 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 nicht, dann stoppen}} PrintWriter writer = response.getWriter(); writer.println("Fehler: Das Formular muss enctype=multipart enthalten");/form-data"); writer.flush(); return; } // Upload-Parameter konfigurieren DiskFileItemFactory factory = new DiskFileItemFactory(); // Setzen der Speicher-Kritikalitäts阈值 - Übersteigt der Speicher, wird ein vorläufiges Datei erzeugt und im vorläufigen Verzeichnis gespeichert factory.setSizeThreshold(MEMORY_THRESHOLD); // Setzen des vorläufigen Speicherverzeichnisses factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // Setzen der maximalen Datei-Upload-Größe upload.setFileSizeMax(MAX_FILE_SIZE); // Setzen der maximalen Anfragegröße (enthält Datei und Formulardaten) upload.setSizeMax(MAX_REQUEST_SIZE); // Chinesische Verarbeitung upload.setHeaderEncoding("UTF-8); // Erstellen eines vorläufigen Pfades, um hochgeladene Dateien zu speichern // Dieser Pfad ist relativ zum Verzeichnis der aktuellen Anwendung String uploadPath = request.getServletContext().getRealPath("./) + File.separator + UPLOAD_DIRECTORY; // Wenn der Ordner nicht existiert, wird er erstellt File uploadDir = new File(uploadPath); falls (!uploadDir.exists()) { uploadDir.mkdir(); } try { // Daten des Antrags analysieren, um Dateidaten zu extrahieren @SuppressWarnings("unchecked") List<FileItem> formItems = upload.parseRequest(request); falls (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 message.jsp".forward(/request.getServletContext().getRequestDispatcher(" 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>
Versuchen Sie jetzt, den Dateiupload mithilfe des HTML-Formulars, das Sie oben erstellt haben, auszuführen. Wenn Sie die folgenden Adresse im Browser aufrufen://localhost:8080/TomcatTest/upload.jsp , wie folgt dargestellt: