項目中使用
commons-fileupload-1.2.1.jar
進行大文件上傳。
測試了一把,效果很不錯。
總結如下:
必須設置好上傳文件的最大閥值
final long MAX_SIZE = 10 * 1024 * 1024 * 1024;// 設置上傳文件最大為 10G
必須設置文件上傳服務器上的臨時目錄
// 文件上傳參數配置
// 創建一個新的文件上傳句柄
DiskFileItemFactory factory = new DiskFileItemFactory();
// 設置內存緩沖區,超過后寫入臨時文件
factory.setSizeThreshold(4096);
// 設置上傳到服務器上文件的臨時存放目錄 -- 非常重要,防止存放到系統盤造成系統盤空間不足
factory.setRepository(new File("F:\\uploadFileTemp"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
// 設置單個文件的最大上傳值
upload.setSizeMax(MAX_SIZE); // 文件上傳上限10G上傳成功后一定要刪除臨時目錄的臨時文件
fileItem.delete(); // 請務必調用,在文件上傳結束后,刪除臨時目錄的文件...
最好記錄下文件從開始上傳到上傳結束的時間點,這個對今后文件上傳時間的分析很有用
另外,因為Struts2的上傳功能也引入了該包,但是卻做了攔截器限制文件的最大上傳大小為2M,可以通過修改它的配置文件動態更改上傳文件的大小;而且,Struts會在文件上傳成功后,幫你刪除掉臨時文件。
我這里使用的是Spring MVC,需要在上傳類中指定最大上傳文件大小,(這玩意一般不動態設置,最大上傳文件大小一般是系統的標准,是讓使用者遵循滴),而且必須在上傳成功后刪除臨時文件。