1. 程式人生 > >fileupload和cos檔案上傳技術區別

fileupload和cos檔案上傳技術區別

jsp檔案上傳大多采用採用開源專案來簡化處理,這裡列出常用的兩個jar包的實現,並進行比較,說明他們的優缺點和應該注意的問題。

Commons FileUpload提供三種檔案上傳處理方式,DiskFileUpload、ServletFileUpload和 PortletFileUpload三種方式,其中DiskFileUpload已經在javadoc下已經被標記為過期的方法,建議用 ServletFileUpload代替,而PortletFileUpload需要配合portlet-api來使用,所以這裡我們只介紹 ServletFileUpload,並且這個也是最常用的。

com.oreilly.servlet也提供了三種檔案上傳的處理方式,MultipartWrapper、 MultipartRequest和MultipartParser三種方式,其中MultipartWrapper和MultipartRequest 的用法基本相同,並且沒有MultipartRequest提供的操作多,所以這裡介紹 MultipartRequest,MultipartParser和前兩者有些不同,可以用來處理某些特殊情況,例如表單中有兩個同名的檔案上傳選擇 框。

我們暫時稱三面三種檔案上傳方式分別為:ServletFileUpload方式 (MultipartTestServlet)、MultipartRequest方式(MultipartTestServlet2)、 MultipartParser方式(MultipartTestServlet3)

程式碼如下: 
test.html

[xhtml] view plain copy  print?
  1. <%@ page language="<a href="http://lib.csdn.net/base/javaee" class='replace_word'
    title="Java EE知識庫"target='_blank'style='color:#df3434; font-weight:bold;'>Java</a>import="java.util.*"contentType="text/html;charset=gbk"pageEncoding="gbk"%>
  2. <html>
  3.   <body>
  4.     <formaction="MultipartTestServlet"enctype="multipart/form-data"method="post">
  5.      <input
    type="text"name="username"/><br/>
  6.      <inputtype="file"name="myfile"/><br/>
  7.      <inputtype="file"name="myfile"/><br/>
  8.      <inputtype="submit"/>
  9.     </form>
  10.     <br/><br/><br/><br/>
  11.     <formaction="MultipartTestServlet2"enctype="multipart/form-data"method="post">
  12.      <inputtype="text"name="username"/><br/>
  13.      <inputtype="file"name="myfile"/><br/>
  14.      <inputtype="file"name="myfile"/><br/>
  15.      <inputtype="submit"/>
  16.     </form>
  17.     <br/><br/><br/><br/>
  18.     <formaction="MultipartTestServlet3"enctype="multipart/form-data"method="post">
  19.      <inputtype="text"name="username"/><br/>
  20.      <inputtype="file"name="myfile"/><br/>
  21.      <inputtype="file"name="myfile"/><br/>
  22.      <inputtype="submit"/>
  23.     </form>
  24.   </body>
  25. </html>

MultipartTestServlet.java

[java] view plain copy  print?
  1. package com.bug.servlet;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import org.apache.commons.fileupload.FileItem;  
  12. import org.apache.commons.fileupload.FileUpload;  
  13. import org.apache.commons.fileupload.FileUploadException;  
  14. import org.apache.commons.fileupload.RequestContext;  
  15. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  16. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  17. import org.apache.commons.fileupload.servlet.ServletRequestContext;  
  18. publicclass MultipartTestServlet extends HttpServlet {  
  19.  public MultipartTestServlet() {  
  20.   super();  
  21.  }  
  22.  publicvoid doPost(HttpServletRequest request, HttpServletResponse response)  
  23.    throws ServletException, IOException {  
  24.   request.setCharacterEncoding("gbk");  
  25.   RequestContext requestContext = new ServletRequestContext(request);  
  26.   if(FileUpload.isMultipartContent(requestContext)){  
  27.    DiskFileItemFactory factory = new DiskFileItemFactory();