1、 文件上传中文乱码:upload.setHeaderEncoding(“ ”);
2、 普通输入项的乱码:item.getString(“ ”);
3、 防止用户不再文件上传的输入项输入上传文件:if(!filename.trim,eques(“”)){}
4、 临时文件删除问题:factory.setRepository(new File(this.getServletContext().getRealPath("/temp"));
……….
Is.close();
Fos.close();
Item.delete();
5、 上传文件保存位置:服务的安全性
不受服务器管理的目录:在c盘
外界不能访问的:在web-inf的子文件夹中
6、 防止上传文件的名字一样被覆盖掉:
给予为一个文件名
filename=UUID.randomUUID().toString()+ "_" + filename;
7、 在同一个文件夹下过多的
Hash目录
//产生目录结构的算法:hash目录
public String generateFilePath(String path,String filename){
//位运算?
int dir1 = filename.hashCode() & 0xf;//一级目录,让得到的hash码和一个十六进制得数进行与运算
int dir2 = (filename.hashCode()>>4) & 0xf; //二级目录
String savepath = path + "\\" + dir1 + "\\" + dir2;
File f = new File(savepath);
if(!f.exists()){ //若目录结构不存在,则要建一个目录
f.mkdirs(); //注意必须用mkdirs() 而不是mkdir()
}
return savepath;
}
8、、限制上传文件大小
upload.setFileSizeMax(1024*1024);
upload.setSizeMax(1024*1024*3);
9、 限制上传类型:
方法一:
String[] arr={“.jpg”,”.bmp”,”.avi”,”.txt”};
List fileType= Arrays.asList(arr);
方法二:
List fileType= Arrays.asList(“.jpg”,”.bmp”,”.avi”,”.txt”);
if(!filename.trim().equals("")){
filename=filename.substring(filename.lastIndexOf("\\")+1);//因为使用的不同浏览器进行访问,为了得到文件名
String var=filename.substring(filename.lastIndexOf("."));
if(!fileType.contains(var)){
request.setAttribute("message","上传的文件只能是.jpg,.bmp,.avi,.txt的格式!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return ;
}
}
10、 上传多个文件
11、 显示上传进度
ProgressListener接口 中的方法update()
ProgressListener接口 中的方法update()
l ProgressListener显示上传进度
ProgressListener progressListener = new ProgressListener() {
public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println("到现在为止, " + pBytesRead + " 字节已上传,总大小为 "
+ pContentLength);
}
};
upload.setProgressListener(progressListener);
l 以KB为单位显示上传进度
long temp = -1; //temp注意设置为类变量
long ctemp = pBytesRead /1024;
if (mBytes == ctemp)
return;
temp = mBytes;