文件的上傳主要分成兩個步驟:
1.用戶在頁面中選擇要上傳的文件,然后將請求提交到Servlet
2.Servlet收到請求,解析用戶上傳的文件,然后將文件存儲到服務器
有以下內容需要注意
1. 表單的method屬性必須為post
2. 表單的enctype屬性必須為multipart/form-data
3.上傳文件的控件是intput,type屬性為file
編寫Servelet。
頁面的表單控件創建好以后,選中文件點擊上傳按鈕請求將會提交到指定的Servlet來處理。
注意:這里不能再像以前的Servlet中那樣,通過request.getParamter()來獲取請求參數了,當enctype="multipart/form-data" 時,再使用getParamter()獲取到內容永遠為空。因為瀏覽器發送請求的方式已經改變。
既然以前的方法不能使用了,這里我們必須要引入一個新的工具來解析請求中的參數和文件,這個工具就是commons-fileupload。
下面是我寫的一個上傳圖片到\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\json\upload文件的servlet代碼
public class AServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload fileUpload =new ServletFileUpload(factory); fileUpload.setFileSizeMax(1024*100); ServletContext servletContext= request.getServletContext(); String realPath =servletContext.getRealPath("/upload"); File file =new File(realPath); if(file.exists()){ file.mkdir(); } try { List<FileItem> fileList = fileUpload.parseRequest(request); for(FileItem item:fileList){ if(item.isFormField()){ String name =item.getFieldName(); String value =item.getString("utf8"); System.out.println(name+value); } else { long size =item.getSize(); String name = item.getName(); System.out.println(size); try { item.write(new File(realPath+"\\"+name)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
限制單個文件大小:

限制總文件的大小:

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>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/AServlet" method="post" enctype="multipart/form-data" > 用戶:<input type="text" name="username"/><br> <input type="file" name="photo"/><br> <input type="file" name="photo1"/><br> <input type="file" name="photo2"/><br> <input type="submit" value="提交" /> </form> </body> </html>
需要注意的是:


