Servlet文件上传功能的实现(commons-fileupload)
生活随笔
收集整理的這篇文章主要介紹了
Servlet文件上传功能的实现(commons-fileupload)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 正常步驟
- 使用 commons-fileupload.jar 實現文件上傳
正常步驟
step1
在 form 中,設置 method="post",設置 enctype="multipart/form-data"。enctype 屬性用于設置表單的編碼方式,對于文件上傳,必須設置成"multipart/form-data"。
step2
在 Servlet 類當中,不能夠使用 request.getParameter() 方法來獲得參數值。要使用 InputStream request.getInputStream(); 分析 InputStream 來獲得參數值。直接分析 InputStream 比較復雜,一般使用一些封裝好的工具(比如 Apache 提供的 commons-fileupload.jar)來獲得參數值。
使用 commons-fileupload.jar 實現文件上傳
Maven 作為構建工具,添加依賴:
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency>FileUploadServlet 的代碼:
package priv.lwx.servlet.web;import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.ServletContext; 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 java.io.File; import java.io.IOException; import java.util.List; import java.util.UUID;/*** description** @author liaowenxiong* @date 2022/2/28 19:48*/ @WebServlet("/fileupload") public class FileUploadServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 創建DiskFileItemFactory對象,該對象為解析器提供了缺省的配置DiskFileItemFactory factory = new DiskFileItemFactory();// 創建解析器ServletFileUpload sfu = new ServletFileUpload(factory);// 使用解析器解析try {List<FileItem> items = sfu.parseRequest(req);// 遍歷集合for (int i = 0; i < items.size(); i++) {FileItem fileItem = items.get(i);// 讀取表單域中的數據時,要區分表單域的類型if (fileItem.isFormField()) {// 普通表單域String userName = fileItem.getString();System.out.println("userName:" + userName);} else {// 文件上傳表單域ServletContext sctx = getServletContext();// 獲取文件上傳目標目錄的路徑String path = sctx.getRealPath("upload");// 會在upload的前面加上部署項目的項目根路徑// 這里要構造File對象,是為了判斷目錄upload是否存在,不存在則創建File file = new File(path);if (!file.exists()) {file.mkdir();}// 獲取文件名String fileName = fileItem.getName(); // image.jpeg/*// 截取文件的擴展名,例如:.jpegfileName = fileName.substring(fileName.lastIndexOf("."));// 自定義文件名稱fileName = UUID.randomUUID().toString().replace("-", "") + fileName;System.out.println("上傳到服務器后的文件名稱:" + fileName);*/File file1 = new File(path + File.separator + fileName);System.out.println("上傳到服務器后的文件路徑:" + file1);// 將數據輸出到目標文件中fileItem.write(file1);}}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}} }頁面代碼:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body style="font-size: 30px;"> <form action="fileupload" method="post" enctype="multipart/form-data">username:<input name="userName"/><br/>選擇一個文件:<input type="file" name="file"/><br/><input type="submit" value="提交"/> </form> </body> </html>總結
以上是生活随笔為你收集整理的Servlet文件上传功能的实现(commons-fileupload)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机触屏失灵修复方法(安卓手机触屏)
- 下一篇: linux apache启动(linux