fileupload是apache commons 用於檔案上傳的元件,實際上就是用來解析http請求,大家都知道,上傳檔案的時候,http的request請求的 content-type 是multipart/form-data,我們就可以用fileupload 來解析http請求,struts,springmvc 等很多mvc框架都是基於fileupload 來實現檔案上傳功能。
2月7日發布了 最新的1.3.1的版本。
大家可以check下來最新的原始碼看下
首先,判斷是否上傳的為檔案
然後獲取檔案的輸入流
拿到流之後我們就可以儲存檔案
以上是其中一種使用方法,如果想將檔案儲存在本地,就可以用使用先生成fileitem,然後再去遍歷items來實現寫檔案
1,其中包括 org.apache.commons.fileupload.servlet.filecleanercleanup 如果上傳檔案用到了disfileitem的話,可以用這個作為***來刪除儲存到磁碟的臨時目錄。同時在建立diskfileitemfactory工廠的時候呼叫如下**,
fileupload有乙個可以用來監聽上傳檔案的過程,主要是用到了 progresslistener這個類
基本實現方式:
fileupload將所有提交的元素(普通form表單域,如text和檔案域file)都看作一樣的fileitem,這樣上傳頁面提交的 request請求也就是乙個fileitem的有序組合,fileupload元件可以解析該request,並返回乙個乙個的fileitem。而對 每乙個fileitem,fileupload元件可以判斷出它是普通form表單域還是檔案file域,從而根據不同的型別,採取不同的操作--如果是 表單域,就讀出其值,如果是檔案域,就儲存檔案到伺服器硬碟上或者記憶體中。
fileupload 主要的核心的類有三個
fileitemfactory:用於建立fileitem,其具體實現是diskfileitemfactory,可以控制檔案儲存在記憶體中還是儲存到臨時磁碟內,改變其預設臨界值。預設是10kb.
servletfileupload 處理表單資料,將資料封裝到 fileitem 物件中。
fileitem 用來封裝http請求的元素以及資料。包含普通引數或者檔案
具體流程圖如下:
下面是對一些主要相關的源**進行解讀。
我們首先看下fileuploadbase的parserequest方法
1.獲取fileitemiterator
2.遍歷fileitemiterator,通過fileitemfactory建立fileitem
3,組裝fileitem
,構造list
其中 iter.next() 會呼叫到 fileuploadbase.findnextitem()方法來封裝fileitem
然後我們看下獲取到item之後的操作
獲取到item之後我們可以遍歷這個items,然後分別呼叫 item的write方法,可以將檔案寫入某個目錄下。
write方法主要分兩步走,如果在記憶體中,就直接獲取,如果在臨時檔案中,則負責乙個新檔案到指定目錄。
使用fileupload元件時需要注意的問題
1, 中文亂碼問題,可以通過 servletuploader的setheaderencoding來制定
2, 設定上傳檔案的最大尺寸,通過servletuploader 的setsizemax方法來指定
3, 合理的設定緩衝區的臨界值,否則會出現outofmemory。
FileUpload 上傳檔案
操作 在頁面內放置乙個fileupload控制項 然後放置上傳的button 或者其他控制項.在 button或者其他控制項的 click 事件中 寫上傳的方法.前台 page language c autoeventwireup true codefile upfile.aspx.cs inher...
使用FileUpload上傳檔案
下面是fileupload上傳的基本步驟 1 建立磁碟工廠 diskfileitemfactory factory new diskfileitemfactory 2 建立處理工具 servletfileupload upload new servletfileupload factory 3 設定...
Fileupload實現檔案上傳
在實際開發中,經常會遇到包含檔案上傳的表單,採用fileupload可以處理這種表單。需要的jar包為commons fileupload.jar和commons io.jar.需要注意的是,表單的enctype屬性必須設定為multipart form data,method屬性為必須為post....