一、保证服务器的安全
把保存上传文件的目录放在用户直接访问不到的地方,
String storeDirecotryRealPath = getServletContext().getRealPath("/WEB-INF/files");
File storeDirecotry = new FIle(storeDirecotryRealPath);//FIle代表文件也表示目录
*************注意,如果在本机上/WEB-INF/files可以换成本机磁盘地址,例如,F:\upload
二、避免文件被覆盖
让文件名唯一:
String filename = fileitem.getName();// 得到上传的名子
fileName = UUID.randomUUID+"_"+fileName;
三、避免同一个文件夹的文件过多
(1)按日期进行打散存储目录
private String makeDirectory(File storeDirectory){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sdate = sdf.format(date);
File file = new File(storeDirectory,sdate);
if(!file.exists()){
file.mkdirs();
}
return sdate;
}
(2)用文件名的hashCode计算大三的存储目录:二级目录
private String makeDirectory(File storeDirectory,String filename){
int hashCode = fileName.hashCode();
String hex = Integer.toHexString(hashCode);
String s = hex.ChartAt(0)+File.separator+hex.charAt(1);
File f = new File(storeDirectory,s);
if(!f.exists()){
f.mkdirs();
}
return s;
}
四 限制文件:web方式不适合传大的文件
单个文件大小:ServletFileUpload.SetFileSizeMax()
总文件大小:(多文件上传)
SerletFileUpload.setSizeMax()
五、判断上传字段用户是否上传
通过判断文件名是否为空即可
六、 临时文件的问题
DiskFileItemFactory:
作用:产生FileItem对象
内部有一个缓存,缓存大小姆认为是10KB。如果上传文件超过10KB,会用磁盘作为缓存。
存放缓存文件的目录: File temp=new File(this.getServletContext().getRealPath("/ temp"));
如果自己用IO流实现的文件上传,要在流关闭后。,清理临时文件。 FileItem.delete();