使用Commons FileUpLoad組件實現檔案上傳功能

來源:互聯網
上載者:User

標籤:factory   技術分享   osi   指定   parse   命令列   上傳檔案   list   odi   

      Commons 是Apache開放的源碼組織的一個java子項目,該項目主要涉及一些開發中常用的模組,如檔案上傳,命令列處理,資料庫連接池等。FileUpLoad就是其中的一個用於處理HTTP檔案上傳的子項目。Commons FileUpLoad組建具有以下幾個特點:

1.使用簡單:Commons FileUpLoad組件可以方便的嵌入JSP檔案中,在JSP檔案中僅編寫少量代碼就可完成檔案上傳功能,十分方便。

2.能夠全程式控制制上傳的內容:使用Commons FileUpLoad組件提供的對象及操作方法可以獲得全部上傳檔案的資訊,包括檔案名稱、類型、大小等,方便操作。

3.能夠對上傳檔案的大小、類型進行控制:為了避免在上傳過程中出現異常資料,在Commons FileUpload組件中,專門提供了相應的方法用於對上傳檔案進行控制。

 環境準備:

在項目中引入Commons-Fileload-1.2.2.jar和Commons-io-2.4.jar架包

設定表單的enctype屬性:

<form  method="post" enctype="multipart/form-data">

在表單中使用Filek控制項選擇檔案:

<input type="file" name="file"/>

注意:上傳檔案是from標籤的method屬性必須設成 "post",不能設定為"get"

表單設定好後,就可以通過Commons-FileUpload組件實現上傳了,在實現上傳之前,首先介紹下該組建的API。

添加完jar架包之後,在JSP檔案中還需要將Commons-FileUpload組建所使用的類庫匯入JSP檔案中,代碼如下:

<%@ page import="org.apache.commeons.fileupload.*"%>

在項目中添加Commons-FileUpload組件後,再瞭解該組建都提供了哪些介面和類來實現檔案的上傳。

 

ServletFileUpload類的常用方法

public void setSizeMax(long sizeMax)     佈建要求資訊實體的最大允許的位元組數

public List parseRequest(HttpServletRequest req)   解析form表單提交的資料,返回一個FileItem執行個體的集合

public static final boolean isMultipartContent(HttpServletRequest req)  判斷請求資訊是否為"multipart/form-data"類型

public void setHeaderEncoding(String encoding)   設定轉換時所使用的字元集編碼

 

Fileltem介面

public boolean isFormField()  判斷FileItem對象封裝的資料類型,普通表單欄位返回true,檔案表單欄位返回false

public String getName()  獲得檔案上傳欄位中的檔案名稱,普通表單欄位返回null

public String getFieldName()  返回表單欄位元素的name值

public void write(File file)  將FileItem對象中儲存的主體內容儲存到指定的檔案中

public String getString()   將FileItem對象中儲存的主體內容以一個字串返回

public long getSize()   返回單個檔案上傳的位元組數

 

FileltemFactory介面與實作類別

public void setSizeThreshold(int sizThreshold)   設定記憶體緩衝區的大小

public void setRepositoryPath(String path)   設定臨時檔案存放的目錄

 

使用Commons FileUpload組件實現檔案上傳

from表單代碼:

<form action="fileupload/UpLoad" method="post" enctype="multipart/form-data">       使用者名稱:<input type="text" name="uname"/>         上傳:<input type="file" name="file"/>    <input type="submit" />    </form>

Servlet模版中的代碼

package fileupload;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.activation.FileDataSource;import javax.servlet.ServletContextEvent;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.FileItemFactory;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UpLoad extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doPost(request,response);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
     //亂碼處理 request.setCharacterEncoding("utf-8"); //上傳 FileItemFactory factory = new DiskFileItemFactory(); //工具 依賴一個工廠 ServletFileUpload upload = new ServletFileUpload(factory); try { //根據請求拆解出一個FileItem集合 一個FileItem對應前台的一個表單欄位 List<FileItem> list = upload.parseRequest(request); //一個item就是一個表單欄位 for (FileItem item : list) { //普通表單欄位 if(item.isFormField()){ if(item.getFieldName().equals("uname")){ String uname = item.getString("utf-8"); request.setAttribute("uname",uname); } }else{ //檔案域欄位 String filename = item.getName(); //在servlet中擷取application對象 String leftpath = getServletContext().getRealPath("/WEB-INF/upload"); File file = new File(leftpath,filename); item.write(file); System.out.println("write ok!"); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

 

檔案上傳成功!

需要去安裝Tomcat的本地路徑去查看上傳的檔案

 

 

使用Commons FileUpLoad組件實現檔案上傳功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.