學習過程當中,碰到這樣一句代碼:java
DiskFileItemFactory factory = new DiskFileItemFactory();
將請求消息實體中的每個項目封裝成單獨的DiskFileItem (FileItem接口的實現) 對象的任務
由 org.apache.commons.fileupload.FileItemFactory 接口的默認實現
org.apache.commons.fileupload.disk.DiskFileItemFactory 來完成。當上傳的文件項目比較小時,直接保存在內存中(速度比較快),比較大時,以臨時文件的形式,保存在磁盤臨時文件夾(雖然速度慢些,可是內存資源是有限的)。數據庫
屬性
1) public static final int DEFAULT_SIZE_THRESHOLD :將文件保存在內存仍是磁盤臨時文件夾的默認臨界值,值爲10240,即10kb。apache
2) private File repository:用於配置在建立文件項目時,當文件項目大於臨界值時使用的臨時文件夾,默認採用系統默認的臨時文件路徑,能夠經過系統屬性 java.io.tmpdir獲取。以下代碼:tomcat
System.getProperty("java.io.tmpdir");性能
3) private int sizeThreshold:用於保存將文件保存在內存仍是磁盤臨時文件夾的臨界值學習
構造方法
1) public DiskFileItemFactory()spa
採用默認臨界值和系統臨時文件夾構造文件項工廠對象。.net
2) public DiskFileItemFactory(int sizeThreshold,File repository)code
採用參數指定臨界值和系統臨時文件夾構造文件項工廠對象。orm
3) FileItem createItem()
根據DiskFileItemFactory相關配置將每個請求消息實體項目建立成DiskFileItem 實例,並返回。該方法歷來不須要咱們親自調用,FileUpload組件在解析請求時內部使用。
4) void setSizeThreshold(int sizeThreshold)
Apache文件上傳組件在解析上傳數據中的每一個字段內容時,須要臨時保存解析出的數據,以便在後面進行數據的進一步處理(保存在磁盤特定位置或插入數據庫)。由於Java虛擬機默承認以使用的內存空間是有限的,超出限制時將會拋出「java.lang.OutOfMemoryError」錯誤。若是上傳的文件很大,例如800M的文件,在內存中將沒法臨時保存該文件內容,Apache文件上傳組件轉而採用臨時文件來保存這些數據;但若是上傳的文件很小,例如600個字節的文件,顯然將其直接保存在內存中性能會更加好些。
setSizeThreshold方法用於設置是否將上傳文件已臨時文件的形式保存在磁盤的臨界值(以字節爲單位的int值),若是從沒有調用該方法設置此臨界值,將會採用系統默認值10KB。對應的getSizeThreshold() 方法用來獲取此臨界值。
5) void setRepository(File repository)
setRepositoryPath方法用於設置當上傳文件尺寸大於setSizeThreshold方法設置的臨界值時,將文件以臨時文件形式保存在磁盤上的存放目錄。有一個對應的得到臨時文件夾的 File getRespository() 方法。
注意:當從沒有調用此方法設置臨時文件存儲目錄時,默認採用系統默認的臨時文件路徑,能夠經過系統屬性 java.io.tmpdir 獲取。以下代碼:
System.getProperty("java.io.tmpdir");
Tomcat系統默認臨時目錄爲「<tomcat安裝目錄>/temp/」。
原文來自 : http://blog.csdn.net/chinaliuyan/article/details/7002016