一:上传文件的细节(都可以在源码那篇文章体现,抽取出来讲呗)
1:中文乱码的问题
//FileItem表示上传表单中的表单项内容
FileItem.getString("UTF-8"),
//如果是上传的文件名字是中文的
ServletUploadFile.setHeaderEncoding("UTF-8");
2:临时文件的删除的问题:防止说临时文件越来越多,占空间,而且临时文件上传没有用了,取文件是在上传的真实目录中取文件
//一定要在关闭IO流之后
FileItem.delete()
3:在同一个目录下上传相同文件名的问题:甲乙两个用户都可能上传a.jpg的图片,防止被覆盖。这也是我前面代码很复杂的原因。考虑很多东西。
//将文件名拼接一个唯一标识符,即UUID,以下是我无重构的代码,makeUuidFileName是一个函数哦
//通过真实的文件名换算出一个唯一的一个文件名
String makeUuidFileName = makeUuidFileName(realFileName);
4:单个目录下文件过多的问题:生成多级目录,采用&算法,有点难了。如果说这里看不懂的话,采用数据库的方式去存取图片路径的话,就简单多了哦
//通过位运算换算出upload文件夹下面的子文件夹
String makeUuidFilePath = makeUuidFilePath(uploadPath,makeUuidFileName);
5:为安全将上传的文件放入客户端无法直接访问的目录中的问题
//将上传的文件,放置到/WEB-INF/upload/目录下
6:重构思想,做到通用性
7:上传文件的大小的问题+类型
//如果无上传文件
if(fileItem.getSize()==0){
throw new NoUpfileException();
}
//只能上传JPG文件
if(!realFileName.endsWith("JPG")){
throw new UpfileTypeException();
}
//只有上传<=200K的文件
if(fileItem.getSize() > 200 * 1024){
throw new UpfileSizeException();
}
8:上传多个文件的问题