zoukankan      html  css  js  c++  java
  • 17.文件上传、下载


    /*文件上传*/(common-fileupload)(common-fileupload是依赖于common-io这个包的)
      使用Apache文件上传组件处理文件上传 /*步骤*/:
        1.创建一个DiskFileFactory factory = new DiskFileFactory();
        2.创建一个文件上传解析器

    1 DiskFileItemFactory factory = new DiskFileItemFactory();
    2 //方法用于设置当上传文件尺寸大于setSizeThreshold方法设置的临界值时,将文件以临时文件形式保存在磁盘上的存放目录。
    3 //有一个对应的获得临时文件夹的 File getRespository() 方法。
    4 factory.setRepository(new File(this.getServletContext().getRealPath("/WEB-INF/temp")));
    5 
    6 ServletFileUpload upload = new ServletFileUpload(factory);


        3.判断提交上来的数据是否是上传表单的数据

    1 if(!upload.isMultipartContent(request)){
    2     //按照传统方式获取数据
    3     return;
    4 }

        4.使用ServletFileUpload 解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项

    1 List<FileItem> list = upload.parseRequest(request);
    2 for(FileItem item : list){
    3     if(item.isFormField()){


        

    文件上传功能有许多需要注意的 /*小细节*/问题,以下列出的几点需要特别注意的

      0.form表单中 加上 enctype="multipart/form-data",声明上传二进制数据

      1.为保证服务器安全,上传文件应该放在外界无法直接访问的目录表,比如放于WEB-INF目录下

      2.为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名

      3.为防止一个目录下面出现太多文件,要使用hash算法打散存储

      4.要限制上传文件的最大值

      5.要先回上传文件的类型,在收到上传文件名时,判断后缀名是否合法

      6.想确保临时文件(当上传文件大小超过工厂设置的缓冲区大小时(不设置默认10KB))删除,一定要在处理完上传文件后,调用item.delete方法

      7.监听文件上传进度

      8.在web页面中动态添加文件上传输入项



    /*文件下载*/

    1.在JSP页面提供下载的文件资源

    2.实现文件下载

    /*如何找到哈希打散后的对应文件*/

    /*哈希打散后,文件名称不会发生变化 依旧是UUID + 文件名 在处理下载的Servlet中,

    同样用Hash打散的方法,通过要下载的唯一文件名(UUID+文件名),和保存要下载文件的根目录,得到要下载的文件的存储目录*/

  • 相关阅读:
    SQL SERVER事务处理
    设计模式之简单工厂模式(静态工厂方法)
    设计模式之工厂方法模式
    为什么静态成员变量要通过类外初始化赋值?
    c++中可以对类中私有成员中的静态变量初始化吗?
    C++中的虚函数(virtual function)
    C++ 基础学习笔记(2)函数(测试题)
    c++中子对象的初始化可在复合类的构造函数的函数体内进行吗?还是子对象的初始化只能在初始化列表中进行?
    C++学习笔记(五)虚函数表解析(转)
    看过的书籍(转)
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7360314.html
Copyright © 2011-2022 走看看