a) 文件名乱码;
解析器调用setHeaderEncoding()
upload.setHeaderEncoding("utf-8");
b) 普通项输入内容乱码:
1. 解码普通输入内容时的编码方式需与页面解码方式相同
a) Value=new String(Value.getBytes("iso8859-1"),"utf-8");
b) Value是存储输入内容的字符串
c) String value=item.getString(“utf-8”);item是用户输入项
c) 防止用户在文件上传时不在文件上传的输入项内输入上传文件
if(!filename.trim().equals("")){//截取掉名字两边的空串,和空串比较看是否为空串决定是否执行程序
//获取文件名
//。。。。。。
}
d) 临时文件的删除问题
i. //指定临时文件的保存位子
factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));//将临时文件存在指定路径
ii. 最后添加 item.delete();删除临时代码(其要添加在流关闭后)
e) 上传文件的保存位子:服务的安全性
i. 保存在WEB-INF文件夹下的子文件中
f) 多个用户上传了同名的文件。一个用户上传后。别的用户上传想同文件名字的文件则会覆盖上一个用户上传的信息,解决方法:filename=UUID.randomUUID().toString()+"_"+filename;//处理上传文件名相同覆盖问题。
g) 在同一个文件夹放置文件过多:hash目录方法---:
public String generateFilePath(String path,String filename){
// 产生目录结构的算法:hash目录
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;
h) 限制上文件的大小
1. upload.setFileSizeMax(1024*1024);
i) 控制上传文件的类型
1. 能上传那些文件的类型
a) String[] arr={“.jpg”,”bmp”,”avi”}
b) Private List fileType=new ArrayList(arr);
String ext=filename.substring(filename.lastIndexOf("."));//获取扩展名
if(!fileType.contains(ext)){
request.setAttribute("message","上传失败--文件类型只能是jpg,txt,jar");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return;
}
j) 显示上传进度
i. ProgressListener接口---update()
class ProgerssHandle implements ProgressListener{
public void update(long arg0, long arg1, int arg2) {
// TODO Auto-generated method stub
System.out.println("已经处理了"+arg0+"数据,总数据是"+arg1+"正在处理第"+arg2+"个数据");
}
}
ii.
upload.setProgressListener(new ProgerssHandle());//文件上传进度监听器