更新時(shí)間:2021-10-28 來源:黑馬程序員 瀏覽量:
DiskFileltemFactory類用于將請(qǐng)求消息實(shí)體中的每一個(gè)文件封裝成單獨(dú)的Fileltem對(duì)象。如果卜傳的文件比較小。將直接保存在內(nèi)存中,如果上傳的文件比較大,則會(huì)以臨時(shí)文件的形式,保存在磁盤的臨時(shí)文件夾中。默認(rèn)情況下,文件保存在內(nèi)存還是硬盤臨時(shí)文件夾的臨界值是10240,即10KB。接下來,首先了解一下DiskFileItemFactory類的兩個(gè)構(gòu)造方法:
DiskFileItemFactory()
采用默認(rèn)臨界值和系統(tǒng)臨時(shí)文件夾構(gòu)造文件項(xiàng)工廠對(duì)象
DiskFileItemFactory(int sizeThreshold,F(xiàn)ilerepository)
采用參數(shù)指定臨界值和系統(tǒng)臨時(shí)文件夾構(gòu)造文件項(xiàng)工廠對(duì)象
上面DiskFileltemFactory類的兩個(gè)構(gòu)造方法,其中,第二個(gè)構(gòu)造方法需要傳遞兩個(gè)參數(shù),參數(shù)sizeThreshold代表文件保存在內(nèi)還是磁盤臨時(shí)文件夾的臨界值,參數(shù)repository表示臨時(shí)文件的存儲(chǔ)路徑。
接下來,針對(duì)DiskFileItemFactory類的常用方法進(jìn)行詳細(xì)講解,具體如下所示。
1. Fileltem createltem(String fieldName, String contentType,boolean isFormField,String fileName)方法
該方法用于將請(qǐng)求消息實(shí)體創(chuàng)建成Fileltem類型的實(shí)例對(duì)象。需要注意的是,該方法是FileUpload組件在解析請(qǐng)求時(shí)內(nèi)部自動(dòng)調(diào)用,無須管理。
2. setSizeThreshold(int sizeThreshold)和getSizeThreshold()方法
setSizeThreshold(int sizeThreshold)方法用于設(shè)置是否將上傳文件以臨時(shí)文件的形式保存在磁盤的臨界值。當(dāng)Apache文件上傳組件解析上傳的數(shù)據(jù)時(shí),需要將解析后的數(shù)據(jù)臨時(shí)保存,以便后續(xù)對(duì)數(shù)據(jù)進(jìn)一步處理。由于Java虛擬機(jī)可使用的內(nèi)存空間是有限的,因此,需要根據(jù)上傳文件的大小決定文件的保存位置。例如,一個(gè)800MB的文件,是無法在內(nèi)存中臨時(shí)保存的,這時(shí),Apache文件上傳組件可以采用臨時(shí)文件的方式來保存這些數(shù)據(jù)。但是,如果上傳的文件很小,只有600KB,顯然將其保存在內(nèi)存中是比較好的選擇。另外,對(duì)應(yīng)的getSizeThreshold()方法用來獲取此臨界值。
3. setRepository(File repository)和getRepository()方法
如果上傳文件的大小大于setSizeThreshold()方法設(shè)置的臨界值,這時(shí),可以采用setRepository()方法,將上傳的文件以臨時(shí)文件的形式保存在指定的目錄下。在默認(rèn)情況下,采用的是系統(tǒng)默認(rèn)的臨時(shí)文件路徑,可以通過以下方式獲取。
System.getProperty("java.io.tmpdir")
另外,對(duì)應(yīng)的getRepository()方法用于獲取臨時(shí)文件。