上传文件的一些实现细节
2011-11-24 22:44
429 查看
上传文件的一些实现细节
1、 中文乱码问题:
(1) 上传文件的中文乱码问题:upload.setHeaderEncoding("utf-8");
(2)普通输入项的中文乱码问题:
//解决输入的中文乱码问题,方法一,手动方式
String inputValue=item.getString("utf-8");
//解决输入的中文乱码问题,方法二
inputValue=new String(inputValue.getBytes("ISO8859-1"),"utf-8");
(3)防止用户不在文件上传的输入项中输入上传文件
If(filename.trim().equals(“”)){
//读取上传文件的内容,并存入本地磁盘
filename = filename.substring(filename
.lastIndexOf("\\") + 1);// 为了得到上传文件的文件名
InputStream is = item.getInputStream();
FileOutputStream fos = new FileOutputStream("e:\\"
+ filename);
// 从输入流中读取数据
byte[] buff = new byte[1024];
int len = 0;
while ((len = is.read(buff)) > 0) {
fos.write(buff, 0, len);
}
is.close();
fos.close();
}
}
(4)临时文件的删除问题
//用来保存临时文件的路径
factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));
。。。
item.delete();//删除操作一定要放在输入输出流的关闭之后。
(5)上传文件的保存位置:服务的安全性
保存在WEB-INF文件夹下的子文件夹中或者不受服务器管理的目录
(6)多个用户上传了同名的文件,这时后面的人上传的文件就会覆盖原有的文件
解决办法:给每一个文件唯一的文件名。UUID。randomUUID().toString()
//上传相同文件名的文件,自动生成id,不在用原有的文件名保存,避免产生冲突
filename=UUID.randomUUID().toString()+"_"+filename;
(7)在同一个文件夹放置文件过多。
解决方法:hash目录、 打散处理。
public String generateFilePath(String path, String filename) {
// 产生目录结构的算法:hash目录
// 一级目录名
int dir1 = filename.hashCode() & 0x0f;
// 先右移4位
int dir2 = filename.hashCode() >> 4 & 0x0f;
String savePath = path + "\\" + dir1 + "\\" + dir2 + "\\";
File f = new File(savePath);
if (!f.exists()) {
// 不存在,创建该目录
f.mkdirs();// 多级目录的创建
}
return savePath;
}
(8)限制用户上传文件的大小
upload.setFileSizeMax(1024*1024);
(9) //限制上传文件的类型
能上传哪些类型的文件
String[] arr={“.jpg”,”.bmp”,”.avi”};
List fileType=Arrays.asList(arr);
List fileType=Arrays.asList(“.jsp”,”.bmp”,”.avi”);
String ext=filename.substring(filename.lastIndexOf("."));
if(!fileType.contains(ext)){
request.setAttribute("message","文件类型只能是jpg、bmp、avi");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
(10)多个文件的问题:
(11)显示上传的进度问题
通过一个监听器来解决的。ProgressListener接口 update()方法,系统会自动的传参数。
1、 中文乱码问题:
(1) 上传文件的中文乱码问题:upload.setHeaderEncoding("utf-8");
(2)普通输入项的中文乱码问题:
//解决输入的中文乱码问题,方法一,手动方式
String inputValue=item.getString("utf-8");
//解决输入的中文乱码问题,方法二
inputValue=new String(inputValue.getBytes("ISO8859-1"),"utf-8");
(3)防止用户不在文件上传的输入项中输入上传文件
If(filename.trim().equals(“”)){
//读取上传文件的内容,并存入本地磁盘
filename = filename.substring(filename
.lastIndexOf("\\") + 1);// 为了得到上传文件的文件名
InputStream is = item.getInputStream();
FileOutputStream fos = new FileOutputStream("e:\\"
+ filename);
// 从输入流中读取数据
byte[] buff = new byte[1024];
int len = 0;
while ((len = is.read(buff)) > 0) {
fos.write(buff, 0, len);
}
is.close();
fos.close();
}
}
(4)临时文件的删除问题
//用来保存临时文件的路径
factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));
。。。
item.delete();//删除操作一定要放在输入输出流的关闭之后。
(5)上传文件的保存位置:服务的安全性
保存在WEB-INF文件夹下的子文件夹中或者不受服务器管理的目录
(6)多个用户上传了同名的文件,这时后面的人上传的文件就会覆盖原有的文件
解决办法:给每一个文件唯一的文件名。UUID。randomUUID().toString()
//上传相同文件名的文件,自动生成id,不在用原有的文件名保存,避免产生冲突
filename=UUID.randomUUID().toString()+"_"+filename;
(7)在同一个文件夹放置文件过多。
解决方法:hash目录、 打散处理。
public String generateFilePath(String path, String filename) {
// 产生目录结构的算法:hash目录
// 一级目录名
int dir1 = filename.hashCode() & 0x0f;
// 先右移4位
int dir2 = filename.hashCode() >> 4 & 0x0f;
String savePath = path + "\\" + dir1 + "\\" + dir2 + "\\";
File f = new File(savePath);
if (!f.exists()) {
// 不存在,创建该目录
f.mkdirs();// 多级目录的创建
}
return savePath;
}
(8)限制用户上传文件的大小
upload.setFileSizeMax(1024*1024);
(9) //限制上传文件的类型
能上传哪些类型的文件
String[] arr={“.jpg”,”.bmp”,”.avi”};
List fileType=Arrays.asList(arr);
List fileType=Arrays.asList(“.jsp”,”.bmp”,”.avi”);
String ext=filename.substring(filename.lastIndexOf("."));
if(!fileType.contains(ext)){
request.setAttribute("message","文件类型只能是jpg、bmp、avi");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
(10)多个文件的问题:
(11)显示上传的进度问题
通过一个监听器来解决的。ProgressListener接口 update()方法,系统会自动的传参数。
相关文章推荐
- 上传文件的一些实现细节
- 上传文件的一些实现细节
- 上传文件的一些实现细节
- php实现文件上传的一些经验
- php实现文件上传的一些经验(摘录)
- Struts2文件上传一些小细节
- 注意这个细节——————target = iframe 实现异步上传文件效果
- 使用Commons-fileupload组件实现文件上传的注意细节
- php实现文件上传的一些经验
- linux 文件IO和标准IO的一些实现细节
- 上传文件的一些细节:
- 上传文件的一些细节
- 关于文件上传的一些实现
- 关于SpringMVC上传文件的一些细节和需要注意的地方
- 上传文件的一些细节
- 为ASP.NET MVC开发一些常用插件(二)—— 实现无刷新文件上传
- 一个操作系统的实现--文件系统调试的一些细节
- 研究了三天的文件上传(jspsmart实现)file和text表单同时提交的问题
- Windows下通过bat脚本实现自动上传文件到ftp服务器
- atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7