文件上传中需要考虑的几个问题
2017-01-13 本文已影响0人
罗志贇
-
保证服务器的安全
把上传的文件放到WEB-INF目录下,因为所有放到WEB-INF目录下的文件,用户是不可以随意的访问下载的,增强了文件的安全性
-
重名文件被覆盖问题
生成随机名:
//此条代码会生成一个36位的一个随机码,类似于UUID,但是不同的是,次条代码生成的随机码不会用"-"进行连接,这样便于当作文件名来使用
new BigInteger(165, new Random()).toString(36).toUpperCase();
-
避免一个文件夹的文件过多
- 按照日期分目录存储
//这个方法可以生成共256个文件夹
private String genChildDirectory(String realPath, String fileName) {
int hashCode = fileName.hashCode();
//根据文件名的哈希值生成一个0~16的一个数字,用来当作一级目录
int dir1 = hashCode&0xf;
//根据文件名的哈希值生成一个0~16的一个数字,用来当作二级目录
int dir2 = (hashCode&0xf0)>>4;
//文件的路径名
String str = dir1+File.separator+dir2;
//判断文件夹是否存在,不存在则创建
File file = new File(realPath,str);
if(!file.exists()){
file.mkdirs();
}
return str;
}
- 按照文件名的hashcode随机生成目录
//按照日期生成子目录
private String genChildDirectory(String realPath) {
Date now = new Date();
//格式化日期
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//将日期深成字符串
String str = df.format(now);
//创建文件
File file = new File(realPath,str);
if(!file.exists()){
file.mkdirs();
}
return str;
}
-
中文乱码
- 普通字段
FileItem.getString(String charset);
- 上传的中文文件
request.setCharacterEncoding("UTF-8");```