1. 程式人生 > >[Servlet3.0新特性]Serlvet檔案上傳

[Servlet3.0新特性]Serlvet檔案上傳

Servlet 3.0的另一個新特性就是提供了處理檔案上傳的功能,使用Servlet 3.0的內容實現檔案上傳需要以下幾個內容:

  • 在處理檔案上傳的Servlet上增加@MultipartConfig註解,表示當前Servlet符合MIME型別的multipart/form-data。
Optional Element Summary
int fileSizeThreshold
java.lang.String location
long maxFileSize
long maxRequestSize
  • Part介面,表示允許接收MIME型別是multipart/form-data型別的POST請求。
Method Summary
void delete()
java.lang.String getContentType()
java.lang.String getHeader(java.lang.String name)
java.util.Collection<java.lang.String> getHeaderNames()
java.util.Collection<java.lang.String> getHeaders(java.lang.String name)
java.io.InputStream getInputStream()
java.lang.String getName()
long getSize()
void write(java.lang.String fileName)

利用Servlet 3.0實現檔案上傳的功能,具體實現程式碼如下:

  • 建立一個JSP頁面用於檔案上傳顯示。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="uploadFile" method="post" enctype="multipart/form-data"> 檔案描述:<input type="text" name="filetext"><br> <input type="file" name="upload"><br> <input type="submit" value="上傳"> </form> </body> </html>
  • 建立一個Servlet用於處理檔案上傳邏輯。
@WebServlet(urlPatterns="/uploadFile")
@MultipartConfig(
fileSizeThreshold = 10 * 1024,//快取大小,當上傳的檔案超出這個大小時會生成臨時檔案
location = "/temp",// 存放臨時檔案的目錄
maxFileSize = 5 * 1024,// 單個檔案大小限制
maxRequestSize = 10 * 1024// 整個請求大小限制
)
public class UploadFileServlet extends HttpServlet {
    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 處理請求中文亂碼
        req.setCharacterEncoding("utf-8");
        // 接收上傳檔案的描述內容
        String filetext = req.getParameter("filetext");
        // 接收上傳檔案的內容
        Part part = req.getPart("upload");
        // 獲取上傳檔案的真實名稱
        String cd = part.getHeader("Content-Disposition");
        int index = cd.indexOf("filename=\"") + 10;
        String filename = cd.substring(index, cd.length() - 1);
        // 讀取上傳目錄的絕對路徑
        String path = getServletContext().getRealPath("/upload");
        // 將上傳檔案進行儲存
        part.write(path + "/" + filename);
    }
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
}

轉載說明:請註明作者及原文連結,謝謝!