zoukankan      html  css  js  c++  java
  • 文件上传fileupload文件接收

    form表单提交数据到servlet后,使用fileupload进行接收。

    fileupload 是由 apache 的 commons 组件提供的上传组件。它最主要的工作就是帮我们解析 request.getInputStream()。

    fileupload 组件需要的JAR包有:

    commons-fileupload.jar,核心包;

    commons-io.jar,依赖包。

    fileupload 简单应用

    fileupload的核心类有:DiskFileItemFactoryServletFileUploadFileItem

    使用 fileupload 组件的步骤

    1. 创建工厂类 DiskFileItemFactory 对象:DiskFileItemFactory factory = new DiskFileItemFactory()

    2. 使用工厂创建解析器对象:ServletFileUpload fileUpload = new ServletFileUpload(factory)

    3. 使用解析器来解析 request 对象:List<FileItem> list = fileUpload.parseRequest(request)

    隆重介绍 FileItem 类,它才是我们最终要的结果。一个FileItem对象对应一个表单项(表单字段)。

    一个表单中存在文件字段和普通字段,可以使用FileItem类的 isFormField()方法来判断表单字段是否为普通字段,如果不是普通字段,那么就是文件字段了。

    主要方法:

    String getName():获取字段的文件名称(原始文件名),普通字段值为null,文件字段为文件的名称;
    String getString():获取字段的内容,如果是文件字段,那么获取的是文件内容,当然上传的文件必须是文本文件,如果是普通字段,获得字段的值;
    String getFieldName():获取字段名称,例如:<input type="test" name="username"/>,返回的是username;
    String getContentType():获取上传的文件的类型,例如:text/plain,如果是普通字段,值为null;
    long getSize():获取字段的大小,单位:byte;
    boolean isFormField():判断当前表单是否为普通文本字段,如果返回true,说明是普通字段,如果返回false,说明是文件字段;
    InputStream getInputStream():获取上传文件对应的输入流,普通字段返回null;
    void write(File):把上传的文件保存到指定文件中。

    api链接:http://commons.apache.org/proper/commons-fileupload/javadocs/api-release/index.html

    示例代码:

     1         //创建接收文件的工厂类
     2         DiskFileItemFactory factory = new DiskFileItemFactory();
     3         //创建文件解析对象
     4         ServletFileUpload sfu = new ServletFileUpload(factory);
     5         try {
     6             //解析request获得表单中的每一文件项(包含普通文本域)
     7             List<FileItem> fiList = sfu.parseRequest(request);
     8             //遍历每一个文本项
     9             for(FileItem fi : fiList){
    10                 //获得原始文件名
    11                 String originalFilename = fi.getName();
    12                 //获得字段的内容
    13                 //Returns the contents of the file item as a String, using the default character encoding.
    14                 String content = fi.getString();
    15                 //获得字段名
    16                 String field = fi.getFieldName();
    17                 //获得字段的内容类型
    18                 String contentType = fi.getContentType();
    19                 //获得字段大小,以byte为单位
    20                 long size = fi.getSize();
    21                 //是否是普通字段
    22                 //如果true,代表普通字段(a simple form field)
    23                 //如果false,代表文件字段
    24                 boolean isFormField = fi.isFormField();
    25                 System.out.println("原始文件名:" + originalFilename);
    26                 System.out.println("字段的内容:" + content);
    27                 System.out.println("字段名:" + field);
    28                 System.out.println("字段的内容类型:" + contentType);
    29                 System.out.println("字段大小(单位:byte):" + size);
    30                 System.out.println("是否是普通字段:" + isFormField);
    31                 System.out.println("============================");
    32             }
    33         } catch (FileUploadException e) {
    34             e.printStackTrace();
    35         }

    附上fileupload 的下载路径:https://pan.baidu.com/s/1kUSBAPx

    密码:p4fj

  • 相关阅读:
    【UML】类图Class diagram(转)
    【UML】用例图Use Case diagram(转)
    【UML】概述
    JAVA设计模式之单例模式
    Java 设计模式之中介者模式
    Java设计模式之访问者模式
    Java设计模式之命令模式
    Java设计模式之责任链模式、职责链模式
    Java设计模式之迭代子模式
    npm install说明
  • 原文地址:https://www.cnblogs.com/ShawnYang/p/7645494.html
Copyright © 2011-2022 走看看