1.上傳文件的中文亂碼
1.1 解決文件的亂碼
ServletFileUpload.setHeaderEncoding("UTF-8")
1.2 解決普通輸入項的亂碼(注意,表單類型為multipart/form-data的時候肯适,設置request的編碼是無效的)
FileItem.setString("UTF-8"); //解決亂碼
2.在處理表單之前乘盼,要記得調(diào)用:
ServletFileUpload.isMultipartContent方法判斷提交表單的類型坦喘,如果該方法返回true货葬,則按上傳方式處理财搁,否則按照傳統(tǒng)方式處理表單即可个束。
3.設置解析器緩沖區(qū)的大小慕购,以及臨時文件的刪除
設置解析器緩沖區(qū)的大小 DiskFileItemFactory.setSizeThreshold(1024*1024);
臨時文件的刪除:在程序中處理完上傳文件后,一定要記得調(diào)用item.delete()方法茬底,以刪除臨時文件
4.在做上傳系統(tǒng)時沪悲,千萬要注意上傳文件的保存目錄,這個上傳文件的保存目錄絕對不能讓外界直接訪問到阱表。
5.限制上傳文件的類型
在處理上傳文件時殿如,判斷上傳文件的后綴名是不是允許的
6.限制上傳文件的大小
調(diào)用解析器的ServletFileUpload.setFileSizeMax(102410245);就可以限制上傳文件的大小,如果上傳文件超出限制最爬,則解析器會拋FileUploadBase.FileSizeLimitExceededException異常涉馁,程序員通過是否抓到這個異常,進而就可以給用戶友好提示爱致。
7.如何判斷空的上傳輸入項
String filename = item.getName().substring(item.getName().lastIndexOf("\")+1); //""
if(filename==null || filename.trim().equals("")){
continue;
}
8烤送、為避免上傳文件的覆蓋,程序在保存上傳文件時糠悯,要為每一個文件生成一個唯一的文件名
public String generateFileName(String filename){
//83434-83u483-934934
return UUID.randomUUID().toString() + "_" + filename;
}
9帮坚、為避免在一個文件夾下面保存超過1000個文件妻往,影響文件訪問性能,程序應該把上傳文件打散后存儲试和。
public String generateSavePath(String path,String filename){
int hashcode = filename.hashCode(); //121221
int dir1 = hashcode&15;
int dir2 = (hashcode>>4)&0xf;
String savepath = path + File.separator + dir1 + File.separator + dir2;
File file = new File(savepath);
if(!file.exists()){
file.mkdirs();
}
return savepath;
}
10讯泣、監(jiān)聽上傳進度
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setProgressListener(new ProgressListener(){
public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println("當前已解析:" + pBytesRead);
}
});
11、在web頁面中添加動態(tài)上傳輸入項