• JSP文件上传


    文件上传就是对文件进行读写,需要编写大量的代码来实现,而且容易发生异常。幸运的是,有很多实用的工具,可以帮助我们实现文件上传的功能,其中应用比较多的是 Commons-FileUpload 组件。本节我们在 JSP 中使用 Commons-FileUpload 组件来实现文件上传。

    Commons-FileUpload 组件具有以下特点:

    • 使用简单:Commons-FileUpload 可以内嵌到 JSP 页面中,所以只需要编写少量的代码就可以完成文件的上传功能。
    • 能够全程控制上传内容:使用 Commons-FileUpload 组件提供的对象及操作方法,可以获得上传文件的信息,即文件名称、类型和大小等。
    • 能够控制上传文件的大小和类型:为了避免在上传过程中出现异常数据,Commons-FileUpload 组件提供了相应的方法来控制上传文件。


    Commons-FileUpload 组件依赖于 FileUpload 和 Commons,需要 commons-fileupload-xx.jar 和 commons-io-xx.jar 文件。

    • commons-fileupload-xx.jar 下载地址:FileUpload – Home
    • commons-io-xx.jar 下载地址:Commons IO – Commons IO Overview
    • 下面我们介绍一下 Commons-FileUpload 组件的接口和实现类。

      1. ServletFileUpload类

      ServletFileUpload 类用于实现文件上传操作,常用方法如下:
       
      方  法说  明
      public void setSizeMax(long sizeMax)设置上传文件总量的最大值 (包含文件和表单数据)
      public List parseRequest(HttpServletRequest req)解析 form 表单提交的数据,返回一个 FileItem 实例的集合
      public static final boolean isMultipartContent(HttpServletRequest req)判断请求信息中的内容是否是”multipart/form-data“类型,是则返回 true,否则返回 false。
      public void setHeaderEncoding(String encoding)设置转换时所使用的字符集编码
    • 2. FileItem接口

      FileItem 接口用于封装单个表单字段元素的数据,一个表单字段对应一个 FileItem 实例,本节示例中使用的是其实现类 DiskFileItem。FileItem 接口提供的常用方法如下:
       
      方  法说  明
      public boolean isFormField()用于判断 FileItem 类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段,如果是普通表单字段则返回 true,否则返回 false。因此,可以使用该方法判断是否为普通表单域,还是文件上传表单域。
      public String getName()获取文件上传的文件名
      public String getFieldName()返回表单字段元素的 name 属性值
      public long getSize()获取上传文件的大小
      public String getString()将 FileItem 对象中保存的主体内容以一个字符串返回。其重载方法 public String getString(String encoding) 中的参数用指定的字符集编码方式
      public void write()将 FileItem 对象中保存的主体内容保存到指定的文件中。

      3. FileItemFactory接口与实现类

      创建 ServletFileUpload 实例需要依赖 FileItemFactory 工厂接口。DiskFileItemFactory 是 FileItemFactory 接口的实现类,该类的常用方法如下。
       
      方  法说  明
      public void setSizeThreshold(int sizeThreshold)设置内存缓冲区的大小
      public void setRepository(String path)设置临时文件存放的目录
  • 相关阅读:
    java反射
    go编程中接口(interface)用法
    埃菲尔之月手表口红礼盒情迷法式浪漫
    docker-compose部署单节点rocketmq-server
    excel 十万级数据秒级导出
    程序员保密协议-中文
    PMP 2022-11-01
    【刷题之路】LeetCode 面试题 03.02. 栈的最小值
    TPM分析笔记(十)TPM 组织架构(TPM hierarchy)
    Linux安全—iptables详解(概念和filter表)
  • 原文地址:https://blog.csdn.net/m0_69505153/article/details/128175446