javaweb笔记:文件上传时要考虑的几个问题

一、保证服务器的安全

    把保存上传文件的目录放在用户直接访问不到的地方,

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();



            

    

猜你喜欢

转载自blog.csdn.net/mddCSDN/article/details/80188957