ServletFileUpload 類

 

ServletFileUpload 類

 

        org.apache.commons.fileupload.servlet.ServletFileUpload類是Apache文件上傳組件處理文件上傳的核心高級類(所謂高級就是不需要管底層實現,暴露給用戶的簡單易用的接口)。

        使用其parseRequest(HttpServletRequest) 方法可以將通過表單中每一個HTML標籤提交的數據封裝成一個FileItem對象,然後以List列表的形式返回。使用該方法處理上傳文件簡單易用。

        如果你希望進一步提高新能,你可以採用 getItemIterator 方法,直接獲得每一個文件項的數據輸入流,對數據做直接處理。

        在使用ServletFileUpload對象解析請求時需要根據DiskFileItemFactory對象的屬性sizeThreshold(臨界值)和repository(臨時目錄)來決定將解析得到的數據保存在內存還是臨時文件中,如果是臨時文件,保存在哪個臨時目錄中?。所以,我們需要在進行解析工作前構造好DiskFileItemFactory對象,通過ServletFileUpload對象的構造方法或setFileItemFactory()方法設置ServletFileUpload對象的fileItemFactory屬性。

ServletFileUpload繼承結構:
java.lang.Object

|—org.apache.commons.fileupload.FileUploadBase

     |—org.apache.commons.fileupload.FileUpload

|—org.apache.commons.fileupload.servlet.ServletFileUpload

構造方法:
1) public ServletFileUpload()

     構造一個未初始化的實例,需要在解析請求之前先調用setFileItemFactory()方法設置 fileItemFactory屬性。

2) public ServletFileUpload(FileItemFactory fileItemFactory)

     構造一個實例,並根據參數指定的FileItemFactory 對象,設置 fileItemFactory屬性。

ServletFileUpload類常用方法:
1)  public void setSizeMax(long sizeMax)
        setSizeMax方法繼承自FileUploadBase類,用於設置請求消息實體內容(即所有上傳數據)的最大尺寸限制,以防止客戶端惡意上傳超大文件來浪費服務器端的存儲空間。其參數是以字節爲單位的long型數字。

       在請求解析的過程中,如果請求消息體內容的大小超過了setSizeMax方法的設置值,將會拋出FileUploadBase內部定義的SizeLimitExceededException異常(FileUploadException的子類)。該方法有一個對應的讀方法:public long getSizeMax()方法。

2) public void setFileSizeMax(long fileSizeMax)
        setFileSizeMax方法繼承自FileUploadBase類,用於設置單個上傳文件的最大尺寸限制,以防止客戶端惡意上傳超大文件來浪費服務器端的存儲空間。其參數是以字節爲單位的long型數字。該方法有一個對應的讀方法:public long geFileSizeMax()方法。

       在請求解析的過程中,如果單個上傳文件的大小超過了setFileSizeMax方法的設置值,將會拋出FileUploadBase內部定義的FileSizeLimitExceededException異常(FileUploadException的子類)。

3) public List parseRequest(javax.servlet.http.HttpServletRequest req)
        parseRequest 方法是ServletFileUpload類的重要方法,它是對HTTP請求消息體內容進行解析的入口方法。它解析出FORM表單中的每個字段的數據,並將它們分別包裝成獨立的FileItem對象,然後將這些FileItem對象加入進一個List類型的集合對象中返回。

       該方法拋出FileUploadException異常來處理諸如文件尺寸過大、請求消息中的實體內容的類型不是“multipart/form-data”、IO異常、請求消息體長度信息丟失等各種異常。每一種異常都是FileUploadException的一個子類型。

4)  public FileItemIterator getItemIterator(HttpServletRequest request)
        getItemIterator方法和parseRequest 方法基本相同。但是getItemIterator方法返回的是一個迭代器,該迭代器中保存的不是FileItem對象,而是FileItemStream 對象,如果你希望進一步提高新能,你可以採用getItemIterator方法,直接獲得每一個文件項的數據輸入流,做底層處理;如果性能不是問題,你希望代碼簡單,則採用parseRequest方法即可。

5) public stiatc boolean isMultipartContent(HttpServletRequest req)
        isMultipartContent方法方法用於判斷請求消息中的內容是否是“multipart/form-data”類型,是則返回true,否則返回false。isMultipartContent方法是一個靜態方法,不用創建ServletFileUpload類的實例對象即可被調用。

6) getFileItemFactory()setFileItemFactory(FileItemFactory)
       方法繼承自FileUpload類,用於設置和讀取fileItemFactory屬性。

7) public void setProgressListener(ProgressListener pListener)
      設置文件上傳進度監聽器。該方法有一個對應的讀取方法:ProgressListener getProgressListener()

8) public void setHeaderEncoding()
       在文件上傳請求的消息體中,除了普通表單域的值是文本內容以外,文件上傳字段中的文件路徑名也是文本,在內存中保存的是它們的某種字符集編碼的字節數組,Apache文件上傳組件在讀取這些內容時,必須知道它們所採用的字符集編碼,才能將它們轉換成正確的字符文本返回。

        setHeaderEncoding方法繼承自FileUploadBase類,用於設置上面提到的字符編碼。如果沒有設置,則對應的讀方法getHeaderEncoding()方法返回null,將採用HttpServletRequest設置的字符編碼,如果HttpServletRequest的字符編碼也爲null,則採用系統默認字符編碼。可以通過一下語句獲得系統默認字符編碼:

         System.getProperty("file.encoding"));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章