English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il Servlet può essere utilizzato insieme al tag HTML form per permettere agli utenti di caricare file sul server. I file caricati possono essere file di testo, immagini o qualsiasi documento.
I file utilizzati in questo articolo sono:
upload.jsp: Modulo di upload dei file.
message.jsp: Pagina di reindirizzamento dopo il successo dell'upload.
UploadServlet.java: Servlet di gestione dell'upload.
I file jar da includere sono: commons-fileupload-1.3.2, commons-io-2.5.jar.
La struttura è come segue:
Attenzione:Servlet 3.0 ha integrato la funzionalità di upload dei file, quindi gli sviluppatori non devono più aggiungere il componente Commons FileUpload al progetto.
In dettaglio, procediamo.
Il seguente codice HTML crea un modulo di upload di file. Ecco alcuni punti da notare:
modulo method multipart/form-data POST metodo, non può essere utilizzato il metodo GET.
modulo L'attributo dovrebbe essere impostato su multipart/form-data L'attributo dovrebbe essere impostato su.
modulo action L'attributo dovrebbe essere impostato sul Servlet che gestisce l'upload dei file sul server back-end. Nell'esempio seguente è utilizzato UploadServlet Servlet per caricare i file.
Per caricare un file singolo, dovresti utilizzare un tag <input .../> con l'attributo type="file". Per permettere l'upload di più file, includi più tag input con valori di nome attributo diversi. I tag input con nomi attributo diversi sono associati a pulsanti di navigazione.
Il codice del file upload.jsp è il seguente:
<%@ 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>Esempio di upload di file - Sito di tutorial di base</title> </head> <body> <h1>Esempio di upload di file - Sito di tutorial di base</h1> <form method="post" action="/TomcatTest/UploadServlet" enctype="multipart/form-data"> Scegli un file: <input type="file" name="uploadFile" /> <br/><br/> <input type="submit" value="Carica" /> </form> </body> </html>
Ecco il codice di sorgente di UploadServlet, che gestisce il caricamento dei file. Prima di ciò, assicurati che le dipendenze siano state aggiunte alla directory WEB-INF/lib del progetto:
L'esempio seguente dipende da FileUpload, quindi assicurati di avere la versione più recente disponibile nel tuo classpath: commons-fileupload.x.x.jar Il file. Puoi trovare http://commons.apache.org/proper/commons-fileupload/ Scarica.
FileUpload dipende da Commons IO, quindi assicurati di avere la versione più recente disponibile nel tuo classpath: commons-io-x.x.jar Il file. Puoi trovare http://commons.apache.org/proper/commons-io/ Scarica.
Puoi scaricare direttamente i due pacchetti di dipendenza forniti sul nostro sito:
Il codice di sorgente di UploadServlet è il seguente:
package com.w3codebox.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 implementation class UploadServlet */ @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; // Directory di archiviazione dei file di upload private static final String UPLOAD_DIRECTORY = "upload"; // Configurazione di upload 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 /** * Upload dei dati e salvataggio dei file */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Verifica se è un upload di multimediali if (!ServletFileUpload.isMultipartContent(request)) { // Se non è così, ferma PrintWriter writer = response.getWriter(); writer.println("Error: La form deve contenere enctype=multipart/form-data"); writer.flush(); return; } // Configurazione dei parametri di upload DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中 factory.setSizeThreshold(MEMORY_THRESHOLD); // 设置临时存储目录 factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大文件上传值 upload.setFileSizeMax(MAX_FILE_SIZE); // 设置最大请求值(包含文件和表单数据) upload.setSizeMax(MAX_REQUEST_SIZE); // 中文处理 upload.setHeaderEncoding("UTF-8"); // 构造临时路径来存储上传的文件 // 这个路径相对当前应用的目录 String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY; // 如果目录不存在则创建 File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdir(); } try { // 解析请求的内容提取文件数据 @SuppressWarnings("unchecked") List<FileItem> formItems = upload.parseRequest(request); if (formItems != null && formItems.size() > 0) { // 迭代表单数据 for (FileItem item : formItems) { // 处理不在表单中的字段 if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String filePath = uploadPath + File.separator + fileName; File storeFile = new File(filePath); // Visualizzare il percorso di upload del file nel terminale System.out.println(filePath); // Salvare il file su disco item.write(storeFile); request.setAttribute("message", "Caricamento del file completato con successo!"); } } } } catch (Exception ex) { request.setAttribute("message", "Errore: " + ex.getMessage()); } // Saltare a message.jsp request.getServletContext().getRequestDispatcher("/message.jsp").forward( request, response); } }
Il codice del file message.jsp è il seguente:
<%@ 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>Risultato del caricamento dei file</title> </head> <body> <center> <h2>${message}</h2> </center> </body> </html>
Compilare il Servlet UploadServlet riportato di seguito e creare le voci necessarie nel file web.xml, come segue:
<?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>
Prova ora a utilizzare il modulo HTML creato in precedenza per caricare un file. Quando accedi al seguente URL nel browser: http://localhost:8080/TomcatTest/upload.jsp , la demo è come segue: