1. 程式人生 > >使用Commons FileUpLoad組件實現文件上傳功能

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

連接 eve quest 包括 ring 必須 請求 模塊 rate

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組件實現文件上傳功能