一、Commons-FileUpload簡介
Commons-FileUpload組件
Commons是Apache開放源代碼組織的一個Java子項目,其中的FileUpload是用來處理HTTP文件上傳的子項目
Commons-FileUpload組件特點
使用簡單:可以方便地嵌入到JSP文件中,編寫少量代碼即可完成文件的上傳功能 能夠全程控制上傳內容 能夠對上傳文件的大小、類型進行控制
獲取Commons-FileUpload組件的方式
http://commons.apache.org/fileupload下載Commons-FileUpload組件
Commons-FileUpload組件類庫:commons-fileupload-1.2.2.jar
Commons-FileUpload組件的API文檔: apidocs
http://commons.apache.org/io下載Commons-IO組件 Commons-IO組件
類庫:commons-io-2.4.jar
Commons-IO組件的API文檔: commons-io-2.4\docs
二、Commons-FileUpload組件的API



三、Commons-FileUpload組件應用

四、代碼
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>上傳</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <form action="DoUpLoadServlet" enctype="multipart/form-data" method="post"> <p>選擇圖片:<input type="file" name="nfile"></p> <p><input type="submit" value="提交"></p> </form> </body> </html>
DoUpLoadServlet
package com.qj.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; import java.util.Iterator; 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.FileUploadBase; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class DoUpLoadServlet */ @WebServlet("/DoUpLoadServlet") public class DoUpLoadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DoUpLoadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String uploadFileName = ""; //上傳的文件名 String fieldName = ""; //表單字段元素的name屬性值 PrintWriter out = response.getWriter();//獲取out對象 //請求信息中的內容是否是multipart類型 boolean isMultipart = ServletFileUpload.isMultipartContent(request); //上傳文件的存儲路徑(服務器文件系統上的絕對文件路徑) String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/" ); //創建臨時文件目錄路徑 File tempPatchFile=new File("d:\\temp\\buffer\\"); if(!tempPatchFile.exists()) //判斷文件或目錄是否存在 tempPatchFile.mkdirs(); //創建指定的目錄,包括所有必需但不存在的父目錄 if (isMultipart) { DiskFileItemFactory factory=new DiskFileItemFactory(); //設置緩沖區大小4kb factory.setSizeThreshold(4096); //設置上傳文件用到臨時文件存放路徑 factory.setRepository(tempPatchFile); ServletFileUpload upload = new ServletFileUpload(factory); //設置單個文件的最大限制 upload.setSizeMax(1024*30); try { //解析form表單中所有文件 List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { //依次處理每個文件 FileItem item = (FileItem) iter.next(); if (!item.isFormField()){ //文件表單字段 String fileName = item.getName(); //通過Arrays類的asList()方法創建固定長度的集合 List<String> filType=Arrays.asList("gif","bmp","jpg"); String ext=fileName.substring(fileName.lastIndexOf(".")+1); if(!filType.contains(ext)) //判斷文件類型是否在允許范圍內 out.print("上傳失敗,文件類型只能是gif、bmp、jpg"); else{ if (fileName != null && !fileName.equals("")) { File fullFile = new File(item.getName()); File saveFile = new File(uploadFilePath, fullFile.getName()); item.write(saveFile); uploadFileName = fullFile.getName(); out.print("上傳成功后的文件名是:"+uploadFileName+ ",文件大小是:"+item.getSize()+"bytes!"); } } } } }catch(FileUploadBase.SizeLimitExceededException ex){ out.print("上傳失敗,文件太大,單個文件的最大限制是:"+upload.getSizeMax()+"bytes!"); }catch (Exception e) { e.printStackTrace(); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
