commons-fileupload組件上傳圖片介紹

基於表單的文件上傳瀏覽器

若是在表單中使用表單元素 <input type=「file」 />,瀏覽器在解析表單時,會自動生成一個輸入框和一個按鈕,輸入框可供用戶填寫本地文件的文件名和路徑名,按鈕能夠讓瀏覽器打開一個文件選擇框供用戶選擇文件:緩存

當表單須要上傳文件時,需指定表單 enctype 的值爲 multipart/form-data服務器

在 form 元素的語法中,enctype 屬性指定將數據發送到服務器時瀏覽器使用的編碼類型。 app

enctype 屬性取值:編碼

application/x-www-form-urlencoded:表單 enctype 屬性的默認值。這種編碼方案使用有限的字符集,當使用了非字母和數字時,必須用」%HH」代替(H 表明十六進制數字)。對於大容量的二進制數據或包含非 ASCII 字符的文原本說,這種編碼不能知足要求。url

multipart/form-data:form 設定了enctype=「multipart/form-data」屬性後,表示表單以二進制傳輸數據 .spa

Commons-fileupload 組件上傳的基本原理code

FileUpload組件將頁面提交的全部元素(普通form表單域,如text和文件域file)都看做同樣的FileItem,這樣上傳頁面提交的 request請求也就是一個FileItem的有序組合,FileUpload組件能夠解析該request,並返回一個一個的FileItem。而對每個FileItem,FileUpload組件能夠判斷出它是普通form表單域仍是文件file域,從而根據不一樣的類型,採起不一樣的操做--若是是表單域,就讀出其值,若是是文件域,就保存文件到服務器硬盤上或者內存中orm

Commons-fileupload 組件API
ServletFileUpload 負責處理上傳的文件數據,並將每部分的數據封裝成一到 FileItem 對象中。
DiskFileItemFactory 是建立 FileItem 對象的工廠,在這個工廠類中能夠配置內存緩衝區大小和存放臨時文件的目錄。
ServletFileUpload 在接收上傳文件數據時,會將內容保存到內存緩存區中,若是文件內容超過了 DiskFileItemFactory 指定的緩衝區的大小,那麼文件將被保存到磁盤上,存儲爲 DiskFileItemFactory 指定目錄中的臨時文件。等文件數據都接收完畢後,ServletUpload 在從文件中將數據寫入到上傳文件目錄下的文件中對象

進行文件上傳的具體操做:

首先,加載必要的jar包:「commons-fileupload-1.2.1.jar」

//使用 FileUpload 組件解析表單:

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

// 解析表單傳遞過來的數據,返回List集合數據-類型:FileItem

List items = upload.parseRequest(request);

// 取得其迭代器

Iterator itr = items.iterator();

//檢查序列中是否還有元素

while (itr.hasNext()) {

//得到序列中的下一個元素

FileItem item = (FileItem) itr.next();

//判斷是文件仍是文本信息

if (item.isFormField()) {

// 當判斷 item 爲 Form 域時,把取得的值傳給建立的 User 對象

}else{

//判斷是否選擇了文件

if ( item.getName() != null && !item.getName().equals("") ) {

上傳文件的大小:item.getSize()
上傳文件的類型: item.getContentType()
上傳文件的名稱和完整路徑: item.getName()

//構造臨時對象

File tempFile = new File(item.getName())

//第一個參數是:完整路徑(不包括文件名)第二個參數是:文件名稱

File file = new File(sc.getRealPath("/") + savePath, tempFile.getName())

// 獲取根目錄對應的真實物理路徑

item.write(file);// 保存文件在服務器的物理磁盤中

相關文章
相關標籤/搜索