• 文件上传


    1.文件上传时,表单需要做的准备

    1).请求方式为 POST 

    2).使用file的表单域:<input type="file" name="file"/>

    3).设置编码方式 enctype="multipart/form-data"  表单以二进制方式进行传输

      当修改编码方式后,后台不能再用 request.getParameter(),获取前台页面参数,获取不到。

      可以使用输入流的方式来获取,但不建议这么做。

      具体使用 commons-fileupload 组件完成问价上传

     I .搭建环境:

    加入jar

    commons-fileupload-1.2.1.jar

    commons-io-2.0.jar

    II.基本思想:

    >commons-fileupload 可以解析请求,得到一个FileItem 对象组成的List

    >commons-fileupload 把所有的请求信息都解析为FileItem对象,无论是一个一般的文本域还是一个文件域.

    >可以调用FileItem的isFormField()方法来判断是一个 表单域 或不是表单域(则是一个文本域)

    可以参看 用户指导 和 api文档

    /commons-fileupload-1.2.1-bin/commons-fileupload-1.2.1/site/using.html

    /commons-fileupload-1.2.1-bin/commons-fileupload-1.2.1/site/apidocs/index.html

    // Process a regular form field
    if (item.isFormField()) {
        String name = item.getFieldName();
        String value = item.getString();
        ...
    }
    // Process a file upload
    if (!item.isFormField()) {
        String fieldName = item.getFieldName();
        String fileName = item.getName();
        String contentType = item.getContentType();
        boolean isInMemory = item.isInMemory();
        long sizeInBytes = item.getSize();
        ...
    }

    III.如何得到List<FileItem>

      >简单方式

    // Create a factory for disk-based file items
    FileItemFactory factory = new DiskFileItemFactory();
    
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    
    // Parse the request
    List /* FileItem */ items = upload.parseRequest(request);

      >复杂方式:可以为文件上传添加一些限制添加和属性

    // Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();
    
    // Set factory constraints
    //设置内存中最多可以存放的上传文件的大小,若超出则把文件写到一个临时的文件夹中,以byte为单位 factory.setSizeThreshold(yourMaxMemorySize); factory.setRepository(yourTempDirectory); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint 设置总的不能超过的大小,也可以设置单个文件的大小
    // public void setFileSizeMax(long fileSizeMax)
    upload.setSizeMax(yourMaxRequestSize); // Parse the request List /* FileItem */ items = upload.parseRequest(request);
    
    
  • 相关阅读:
    Charles抓包使用教程
    学习规划
    log重复数据
    CNN实现推特文本分类
    conda env
    matplotlib画基础表
    决策树算法
    sklearn实现决策树
    分词与文本预处理工具
    matplotlib作图学习(1)
  • 原文地址:https://www.cnblogs.com/wq3435/p/5237113.html
Copyright © 2020-2023  润新知