ServletFileUpload 类

org.apache.commons.fileupload.servlet.ServletFileUpload类是Apache文件上传组件处理文件上传的核心高级类(所谓高级就是不需要管底层实现,暴露给用户的简单易用的接口)。

使用其parseRequest(HttpServletRequest) 方法可以将通过表单中每一个HTML标签提交的数据封装成一个FileItem对象,然后以List列表的形式返回。使用该方法处理上传文件简单易用。

如果你希望进一步提高新能,你可以采用 getItemIterator 方法,直接获得每一个文件项的数据输入流,对数据做直接处理。

在使用ServletFileUpload对象解析请求时需要根据DiskFileItemFactory对象的属性sizeThreshold(临界值)和repository(临时目录)来决定将解析得到的数据保存在内存还是临时文件中,如果是临时文件,保存在哪个临时目录中?。所以,我们需要在进行解析工作前构造好DiskFileItemFactory对象,通过ServletFileUpload对象的构造方法或setFileItemFactory()方法设置ServletFileUpload对象的fileItemFactory属性。

ServletFileUpload继承结构:
java.lang.Object

|—org.apache.commons.fileupload.FileUploadBase

|—org.apache.commons.fileupload.FileUpload

|—org.apache.commons.fileupload.servlet.ServletFileUpload

构造方法:
1) public ServletFileUpload()

构造一个未初始化的实例,需要在解析请求之前先调用setFileItemFactory()方法设置 fileItemFactory属性。

2) public ServletFileUpload(FileItemFactory fileItemFactory)

构造一个实例,并根据参数指定的FileItemFactory 对象,设置 fileItemFactory属性。

ServletFileUpload类常用方法:
1)  public void setSizeMax(long sizeMax)
        setSizeMax方法继承自FileUploadBase类,用于设置请求消息实体内容(即所有上传数据)的最大尺寸限制,以防止客户端恶意上传超大文件来浪费服务器端的存储空间。其参数是以字节为单位的long型数字。

在请求解析的过程中,如果请求消息体内容的大小超过了setSizeMax方法的设置值,将会抛出FileUploadBase内部定义的SizeLimitExceededException异常(FileUploadException的子类)。该方法有一个对应的读方法:public long getSizeMax()方法。

2) public void setFileSizeMax(long fileSizeMax)
        setFileSizeMax方法继承自FileUploadBase类,用于设置单个上传文件的最大尺寸限制,以防止客户端恶意上传超大文件来浪费服务器端的存储空间。其参数是以字节为单位的long型数字。该方法有一个对应的读方法:public long geFileSizeMax()方法。

在请求解析的过程中,如果单个上传文件的大小超过了setFileSizeMax方法的设置值,将会抛出FileUploadBase内部定义的FileSizeLimitExceededException异常(FileUploadException的子类)。

3) public List parseRequest(javax.servlet.http.HttpServletRequest req)
        parseRequest 方法是ServletFileUpload类的重要方法,它是对HTTP请求消息体内容进行解析的入口方法。它解析出FORM表单中的每个字段的数据,并将它们分别包装成独立的FileItem对象,然后将这些FileItem对象加入进一个List类型的集合对象中返回。

该方法抛出FileUploadException异常来处理诸如文件尺寸过大、请求消息中的实体内容的类型不是“multipart/form-data”、IO异常、请求消息体长度信息丢失等各种异常。每一种异常都是FileUploadException的一个子类型。

4)  public FileItemIterator getItemIterator(HttpServletRequest request)
        getItemIterator方法和parseRequest 方法基本相同。但是getItemIterator方法返回的是一个迭代器,该迭代器中保存的不是FileItem对象,而是FileItemStream 对象,如果你希望进一步提高新能,你可以采用getItemIterator方法,直接获得每一个文件项的数据输入流,做底层处理;如果性能不是问题,你希望代码简单,则采用parseRequest方法即可。

5) public stiatc boolean isMultipartContent(HttpServletRequest req)
        isMultipartContent方法方法用于判断请求消息中的内容是否是“multipart/form-data”类型,是则返回true,否则返回false。isMultipartContent方法是一个静态方法,不用创建ServletFileUpload类的实例对象即可被调用。

6) getFileItemFactory()和setFileItemFactory(FileItemFactory)
       方法继承自FileUpload类,用于设置和读取fileItemFactory属性。

7) public void setProgressListener(ProgressListener pListener)
      设置文件上传进度监听器。该方法有一个对应的读取方法:ProgressListener getProgressListener()。

8) public void setHeaderEncoding()
       在文件上传请求的消息体中,除了普通表单域的值是文本内容以外,文件上传字段中的文件路径名也是文本,在内存中保存的是它们的某种字符集编码的字节数组,Apache文件上传组件在读取这些内容时,必须知道它们所采用的字符集编码,才能将它们转换成正确的字符文本返回。

setHeaderEncoding方法继承自FileUploadBase类,用于设置上面提到的字符编码。如果没有设置,则对应的读方法getHeaderEncoding()方法返回null,将采用HttpServletRequest设置的字符编码,如果HttpServletRequest的字符编码也为null,则采用系统默认字符编码。可以通过一下语句获得系统默认字符编码:

System.getProperty("file.encoding"));

ServletFileUpload 类相关推荐

  1. commons-fileupload的ServletFileUpload类

    ServletFileUpload类 1.前言 在看本篇文章之前请你确保自己已经知道DiskFileItemFactory类的属性,作用以及其内部的一些常用方法.因为本篇的ServletFileUpl ...

  2. 文件上传: FileItem类、ServletFileUpload 类、DiskFileItemFactory类

    文件上传: ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中, 在使用ServletFileUpload对象解析请求时需要根据DiskFi ...

  3. JavaWeb文件上传的实现及ServletFileUpload类的使用

    1.文件上传代码所依赖的jar包: <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload - ...

  4. java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些?

    上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些. 文件上传的方式Servlet2.5 方式 Servlet3.0 方式 SpringMVC 方式 案例实操 S ...

  5. ServletFileUpload使用方法

    当我们在 HTML 表单中选择本地文件之后点击"提交"按钮则会将文件上传到服务器中,此时该 HTTP 请求正文的数据类型就是 multipart/form-data 型的.而在 S ...

  6. ServletFileUpload 简单介绍

    1.ServletFileUpload类源码 public class ServletFileUpload extends FileUpload {/*** Constant for HTTP POS ...

  7. FileItem类的使用

    文件上传: FileItem类.ServletFileUpload 类.DiskFileItemFactory类 文件上传: ServletFileUpload负责处理上传的文件数据,并将表单中每个输 ...

  8. AJAX+JSF组件实现高性能的文件上载

    一. 引言 基于浏览器的文件上传,特别是对于通过<input type="file">标签包含到Web页面来实现上传的情况,还存在较严重的性能问题.我们知道,超过10M ...

  9. 在Servlet中使用开源fileupload包实现文件上传功能

    当我们在 HTML 表单中选择本地文件之后点击"提交"按钮则会将文件上传到服务器中,此时该 HTTP 请求正文的数据类型就是 multipart/form-data 型的.而在 S ...

最新文章

  1. [转]mysql性能的检查和调优方法
  2. linux日志生成速率统计,Linux学习29-awk提取log日志信息,统计日志里面ip访问次数排序...
  3. 用函数求10个数的平均值_Excel AVERAGEIF函数条件求平均值
  4. 类和对象—对象特性—拷贝构造函数调用时期
  5. Spring Boot2
  6. linux 设备/dev
  7. SpringCloud工作笔记042---fastjson生成json时Null属性不显示的解决方法
  8. vs code 插件 简繁转换_18个vscode插件打造python的超级IDE
  9. 大学平均绩点计算器_申请韩国名校绩点是不是万能的?
  10. 小虾教你网购组装电脑单
  11. python入门_老男孩_数据类型简介_int/bool/str转换_字符串索引和切片_字符串操作_day3...
  12. 常用模块 re模块
  13. 图书管理系统的结构流程图
  14. AP(接入点)模式、Router(无线路由)模式、Repeater(中继)模式、Bridge(桥接)模式、 Client(客户端)模式
  15. 计算机黑屏风扇异响,电脑开机黑屏主机风扇一直响
  16. OrangePi PC 玩Linux主线内核踩坑之旅(二)之制作镜像后的查遗补缺
  17. YOLO v3算法解析
  18. jenkins安装配置
  19. LaTeX学习准备——TexLive和TeXStudio的安装
  20. 转]C,C++经典问题,及面试笔试题

热门文章

  1. java modbus tcp_modbus tcp 入门详解
  2. 在苹果Mac上如何设置固件密码?
  3. pandas多列筛选
  4. vf计算机二级的描述,计算机二级vf共基础知识归纳.doc
  5. 家用投影仪哪款好?哪个品牌的投影仪比较好
  6. Andersen Global为墨西哥业务增加深度
  7. php能区别电脑网站和手机网站吗_怎么嵌入到phpcms,Phpcms V9手机门户设置教程:怎么用PC V9做手机网站...
  8. scratch一起学案例——《跳跃的小猫》
  9. 分布式爬虫(四):大结局
  10. 华为手机app闪退重启清空log日志问题