DiskFileItemFactory

使用common-fileUpload製作文件上傳(DiskFileItemFactory方式)2009年01月21日 星期三 15:21所需包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 在網絡找了關於JSP上傳文件問題,本來想做個利用AJAX做帶進度條的文件上傳功能,但是網絡上的文章都比較複雜,看了半天都看不懂,發現自己連最簡單的文件上傳都沒有做過,那個就暫時算了,老實點從簡單的先做起再研究那個帶進度條的文件上傳。 在網絡上找了下jsp上傳文件的代碼,有很多,但是多數人寫的不清楚,不過找了一個稍微清楚點的文章,文章地址給忘了(,真對不起人家,做人還不夠厚道)。下面基本原封不動的把代碼貼上來,以備後用。首先下載:commons-fileUpload-1.2 的jar包:http://www.apache.org/commons/,同時可以把commons-IO的jar包一起下載,以後會用到的。 1、上傳的前臺頁面:




2、上傳的後臺代碼: 後臺代碼是個servlet,很簡單咯,覺得比ASP利用組件還簡單。呵呵 package upload; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; 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.FileUpload; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.RequestContext; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletRequestContext; public class MultipartTestServlet extends HttpServlet { public MultipartTestServlet() { super(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設置request編碼,主要是爲了處理普通輸入框中的中文問題 request.setCharacterEncoding("gbk"); //這裏對request進行封裝,RequestContext提供了對request多個訪問方法 RequestContext requestContext = new ServletRequestContext(request); //判斷表單是否是Multipart類型的。這裏可以直接對request進行判斷,不過已經以前的用法了 if(FileUpload.isMultipartContent(requestContext)){ DiskFileItemFactory factory = new DiskFileItemFactory(); // 設置文件的緩存路徑 String savedir = "d:/tmp/"; java.io.File d = new java.io.File(savedir); if(!d.exists()){ d.mkdirs(); } factory.setRepository(d); ServletFileUpload upload = new ServletFileUpload(factory); //設置上傳文件大小的上限,-1表示無上限 upload.setSizeMax(100*1024*1024); List items = new ArrayList(); try { //上傳文件,並解析出所有的表單字段,包括普通字段和文件字段 items = upload.parseRequest(request); } catch (FileUploadException e1) { System.out.println("文件上傳發生錯誤" + e1.getMessage()); } //下面對每個字段進行處理,分普通字段和文件字段 Iterator it = items.iterator(); while(it.hasNext()){ FileItem fileItem = (FileItem) it.next(); //如果是普通字段 if(fileItem.isFormField()){ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); }else{ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + fileItem.isInMemory() + " " + fileItem.getContentType() + " " + fileItem.getSize()); //保存文件,其實就是把緩存裏的數據寫到目標路徑下 if(fileItem.getName()!=null && fileItem.getSize()!=0){ File fullFile = new File(fileItem.getName()); File newFile = new File("c:/temp/" + fullFile.getName()); try { fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("文件沒有選擇 或 文件內容爲空"); } } } } } } 3、編譯和配置servlet 先設置classpath,使它包含commons-fileUpload的jar包路徑,然後進行編譯即可,注意這裏的包路徑。 然後打開站點下的web-inf路徑下的web.xml,在裏面添加: MultipartTestServlet upload.MultipartTestServlet MultipartTestServlet /MultipartTestServlet 好了,現在就可以文件上傳了,不過運行之前記得在c:/下新建tmp和temp文件夾,別忘了,不然程序會報告錯誤的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章