java之上传文件的细节(都可以在源码体现,抽取出来讲呗)

一:上传文件的细节(都可以在源码那篇文章体现,抽取出来讲呗)
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:上传多个文件的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值