以下为servlet处理文件上传文件的时候所放生的一些常见问题和常用设置。
1. 上传的文件有中文乱码问题。
利用解析器中的setHeaderEncoding(String Encoding).就能解决
2. 在普通输入项中的中文乱码问题。
FileItem的对象有一个getString(String Encoding),调用时指定字符集即可解决。
3. 不同用户在上传同一文件名的文件时,如何避免文件冲突
利用UUID中的randomUUID()即可得到一个随机字符串,添加到文件上即可避免文件冲突。
4. 如何限制上传文件大小
setFileSizeMax(longlength)设置单个文件的最大长度
setSizeMax(longlength)设置所有文件的最大长度
5. 在拥有多个上传文本框的时候,如何防止用户不填写所有文本框
通过if语句来判定,如果为空串,即不执行下面的语句
6. 如何得到上传文件的扩展名
通过剪切字符串的方法来得到
7. 如何限定上传文件类型
首先定义一个拥有多个扩展名的列表,通过上述方法得到上传文件的扩展名后,利用list列表的contains()方法来比较是否合法
8. 如何防止用户上传文件后恶意访问
将上传的文件存储在WEB-INF下,就不能访问
9. 如何创建多级目录
利用位运算符,通过得到文件名的hashcode来得到不同的目录或子目录。详见下方法
public String generateFilePath(String path,String filename){
//产生目录结构的算法
int dir1=filename.hashCode() & 0x0f;//一级目录名
int dir2=filename.hashCode()>>4 & 0x0f;//二级目录名
String savePath=dir1+"\\"+dir2+"\\";
File f=new File(savePath);
if(!f.exists()){
f.mkdirs();
}
return savePath;
}
10. 如何得到上传文件的状态(即文件传输进度)
创建内部类实现ProgressListener接口,并实现update方法(第一个参数为已上传数据大小,第二个为当前文件大小,第三个为第几个文件)