在(zai)Java Web開(kāi)發(fā)中,文件上傳是一個(gè)常見(jiàn)的功能,而在實(shí)際項目中,我們可能會(huì )遇到需要將文件保存到磁盤(pán)的情況,這時(shí),我們可以使用Java中的DiskFileItemFactory和DiskFileItem類(lèi)來(lái)實(shí)現文件的上傳和保存,本文將詳細介紹如何使用DiskFileUpload進(jìn)行文件上傳。
Disk??FileItemFactory和ServletFileUpload對象1、我們需要創(chuàng )建一個(gè)DiskFileItemFactory對象,用于生成DiskFileItem對象,創(chuàng )建方法如下:
DiskFileIt??emFactory factory = new DiskFileItemFactory(??);2、我們需要創(chuàng )建一個(gè)ServletFileUpload對象,用于處理文件上傳,創(chuàng )ヽ(′ー`)ノ建方法如下:
ServletFileUpload upload = new ServletFileUpload(factory);
ServletFileUpload對象1、為了限制上傳文件的大小,我們可以設置ServletFileUpload對象的屬性,我們可(′▽?zhuān)?以設置最大文件大小為10MB:
upload.setSizeMax(10 * 1024 * 1024);
2、為了??限制允許上傳的文件類(lèi)型,我們可以使用setAllowedFileTypes()方法,我們只允許上傳圖片文件:
upload.setAllowedFileTypes(new String[]{ "image/jpeg", "image/pn(′?_?`)g", "image/gif"});(T_T)3、為了限制同時(shí)上傳的文件數量,我??們可以使用setFileSizeMax()方法,我們只允許上傳最多5個(gè)文件:
upload.setFileSizeMax(5);
1、在處理文件上傳請求時(shí),我們需要從請求中解析出文件項列表,這可???以通過(guò)調用ServletFileUpload對象的parseRequest()方法實(shí)現:
List<FileItem> items = uploa??d.parseReq(′_ゝ`)uest(request);for (FileItem item : items) { // 對每個(gè)文件項進(jìn)行處理,例如保存到磁盤(pán)、返回給客戶(hù)端等}1、對于要保存到磁盤(pán)ヽ(′▽?zhuān)?ノ的文件項,我們可以直接使用其提供的輸入流讀取數據,然后將其(qi)寫(xiě)入到磁盤(pán)指定的路徑。ヽ(′▽?zhuān)?ノ
St??ring savePath = "D:/upヽ(′▽?zhuān)?ノloads/&quヽ(′ー`)ノot;; // 保存路徑String fileName = item.getName(); // 文件ヽ(′▽?zhuān)?ノ名(包括擴展名)InputSt??ream inputStream = item.getInputStream(); // 獲取文件輸入流BufferedOutput??Stream outputStream = new BufferedOutputStream(new FileOutputStream(savePath + fileName)); // 創(chuàng )建緩沖輸出流,用于寫(xiě)入數據到磁盤(pán)文件byte[] buffer = new byte[1024]; // 創(chuàng )建緩沖區,用于存儲讀取到的數據塊int bytesRead; // 記錄每次讀取到的字節數while ((bytesRead = inputStream.read(buff(′?`)er)) != -1) { // 循環(huán)讀取數據,直到讀取完畢 outputSt??ream.write(buffer, 0, bytesRead); // 將讀取到的數據寫(xiě)入到磁??盤(pán)文件中}o(′ω`*)utputStream.close(); // 關(guān)閉輸出流inputStream.close(); // 關(guān)閉輸入流2、如何獲取上傳文件的大???答:可以通過(guò)調用FileItem對象的getSize()方法來(lái)獲取上傳文件的大小??,需要注意的是,這個(gè)大小包括了文件頭信息等額外的數據,如果只需要計算實(shí)際的(de)文件內容大小,可以在保存到磁盤(pán)之??前先將ヽ(′▽?zhuān)?ノ輸入流的內容讀取到內存中,然后再計算內存占用的大小。
Copyright ? 2012-2018 天津九安特機電工程有限公司 版權所有 備案號: