更新時(shí)間:2021-10-28 來(lái)源:黑馬程序員 瀏覽量:
ServletFileUpload類(lèi)是Apache組件處理文件上傳的核心高級(jí)類(lèi),通過(guò)使用parseRequest(HttpServletRequest)方法可以將HTML中每個(gè)表單提交的數(shù)據(jù)封裝成個(gè)Fileltem對(duì)象,然后以List列表的形式返回。接下來(lái),首先看一下ServletFileUpload類(lèi)的構(gòu)造方法如下所示:
ServletFileUpload()
構(gòu)造一個(gè)未初始化的ServletFileUpload實(shí)例對(duì)象
ServletFileUpload(FileItemFactory fileItemFactory)
根據(jù)參數(shù)指定的FileItemFactory對(duì)象創(chuàng)建一個(gè)ServletFileUpload對(duì)象
由于在文件上傳過(guò)程中,F(xiàn)ileltemFactory類(lèi)必須設(shè)置,因此,在使用第一個(gè)構(gòu)造方法創(chuàng)建ServletFileUpload對(duì)象時(shí),首先需要在解析請(qǐng)求之前調(diào)用setFileltemFactory()方法設(shè)置fileltemFactory屬性。
了解了ServletFileUpload對(duì)象的創(chuàng)建,接下來(lái),學(xué)習(xí)一下ServletFileUpload類(lèi)的方法,具體如下。
1. setSizeMax(long sizeMax)和getSizeMax()方法
setSizeMax()方法繼承自FileUploadBase類(lèi),用于設(shè)置請(qǐng)求消息實(shí)體內(nèi)容(即所有上數(shù)據(jù))的最大尺寸限制,以防止客戶(hù)端惡意上傳超大文件來(lái)浪費(fèi)服務(wù)器端的存儲(chǔ)空間。其中,參數(shù)sizeMax以字節(jié)為單位。
另外,對(duì)應(yīng)的getSizeMax()方法用于讀取請(qǐng)求消息實(shí)體內(nèi)容所允許的最大值。
2.setFileSizeMax(long fileSizeMax)方法
setFileSizeMax()方法繼承自FileUploadBase類(lèi),用于設(shè)置單個(gè)上傳文件的最大尺限制,以防止客戶(hù)端惡意上傳超大文件來(lái)浪費(fèi)服務(wù)器端的存儲(chǔ)空間。其中,參數(shù)fileSizeMax是以字節(jié)為單位。
另外,對(duì)應(yīng)的getFileSizeMax()方法用于獲取單個(gè)上傳文件所允許的最大值。
3. parseRequest(javax.servlet.http.HttpServletRequest req)
parseRequest()方法是ServletFileUpload類(lèi)的重要方法,它是對(duì)HTTP請(qǐng)求消息體內(nèi)容進(jìn)行解析的入口。它解析出FORM表單中的每個(gè)字段的數(shù)據(jù),并將它們分別包裝成獨(dú)立的Fileltem對(duì)象,然后將這些Fileltem對(duì)象加入進(jìn)一個(gè) List類(lèi)型的集合對(duì)象中返回。
4. getltemlterator(HttpServletRequest request)
getItemIterator()方法和parseRequest()方法基本相同。但是getItemIterator()方法返回的是一個(gè)迭代器,該迭代器中保存的不是Fileltem對(duì)象,而是FileltemStream對(duì)象果希望進(jìn)一步提高性能,可以采用getItemIterator()方法,直接獲得每一個(gè)文件項(xiàng)的數(shù)據(jù)輸人流,做底層處理;如果性能不是問(wèn)題,希望代碼簡(jiǎn)單,則采用parseRequest()方法即可。
5. isMultipartContent(HttpServletRequest req)
isMultipartContent()方法用于判斷請(qǐng)求消息中的內(nèi)容是否是multipart/form-data類(lèi)型,如果是,則返回true,否則返回false。需要注意的是,isMultipartContent()方法是靜態(tài)方法,不用創(chuàng)建ServletFileUpload類(lèi)的實(shí)例對(duì)象即可被調(diào)用。
6. getFileltemFactory()和setFileltemFactory(FileltemFactory factory)
這兩個(gè)方法繼承自FileUpload類(lèi),分別用于讀取和設(shè)置fileltemFactory屬性。
7. setHeaderEncoding(String encoding)方法和getHeaderEncoding()方法
這兩個(gè)方法繼承自FileUploadBase類(lèi),用于設(shè)置和讀取字符編碼。需要注意的是,如果沒(méi)有使用setHeaderEncoding()設(shè)置字符編碼,則getHeaderEncoding()方法返回null,上傳組件會(huì)采用HttDServletRequest設(shè)置的字符編碼。但是,如果HttpServletRequest的字符編碼和為null,這時(shí),上傳組件將采用系統(tǒng)默認(rèn)的字符編碼。獲取系統(tǒng)默認(rèn)字符編碼的方式如下所示:
System.getProperty("file.encoding")