当前位置: 首页 > news >正文

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)设置临时文件存放的目录

相关文章:

  • qt人员管理模块(模块化程序)功能块复制直接使用不冲突
  • [附源码]计算机毕业设计微信点餐系统Springboot程序
  • Linux——匿名管道、命名管道及进程池概念和实现原理
  • 目标检测算法——YOLOv5/YOLOv7改进之结合特征提取网络RFBNet(涨点明显)
  • Spark中宽依赖、窄依赖、Job执行流程
  • R语言最优聚类数目k改进kmean聚类算法
  • 【torch.utils.data.sampler】采样器的解析和使用
  • Springboot魅力乡村管理系统srb4s计算机毕业设计-课程设计-期末作业-毕设程序代做
  • 【星球】【slam】 研讨会(5)VINS:Mono+Fusion 重点提炼
  • 机器学习笔记之受限玻尔兹曼机(三)推断任务
  • 【ASE+python学习】-批量识别石墨烯团簇结构中的吡啶氮,并删除与其相连的氢
  • 【算法】排序——冒泡排序
  • 【数据结构】二分搜索树
  • MySQL 中的 sql_mode 选项以及配置
  • mysql数据库
  • JSP | 基于Servlet和JSP改造oa项目
  • 2022SDNU-ACM结训赛题解
  • JavaWeb_第5章_会话技术_Cookie+Session
  • 新手入门SLAM必备资料
  • python -- PyQt5(designer)中文详细教程(四)事件和信号