学科分类
目录
Java Web

ServletFileUpload类

ServletFileUpload类是Apache组件处理文件上传的核心高级类,通过使用parseRequest(HttpServletRequest) 方法可以将HTML中每个表单提交的数据封装成一个FileItem对象,然后以List列表的形式返回。接下来,首先看一下ServletFileUpload类的构造方法,如表1所示。

表1 ServletFileUpload类的构造方法

方法声明 功能描述
ServletFileUpload() 构造一个未初始化的ServletFileUpload实例对象
ServletFileUpload(FileItemFactory fileItemFactory) 根据参数指定的FileItemFactory 对象创建一个ServletFileUpload对象

表1列举了ServletFileUpload类的两个构造方法。由于在文件上传过程中,FileItemFactory类必须设置,因此,在使用第一个构造方法创建ServletFileUpload对象时,首先需要在解析请求之前调用setFileItemFactory()方法设置fileItemFactory属性。

了解了ServletFileUpload对象的创建,接下来,学习一下ServletFileUpload类的方法,具体如下:

1、setSizeMax(long sizeMax)和getSizeMax()方法

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

另外,对应的getSizeMax()方法用于读取请求消息实体内容所允许的最大值。

2、setFileSizeMax(long fileSizeMax)方法

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

另外,对应的geFileSizeMax()方法用于获取单个上传文件所允许的最大值。

3、parseRequest(javax.servlet.http.HttpServletRequest req)

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

4、getItemIterator(HttpServletRequest request)

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

5、isMultipartContent(HttpServletRequest req)

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

6、getFileItemFactory()和setFileItemFactory(FileItemFactory factory)

这两个方法继承自FileUpload类,分别用于读取和设置fileItemFactory属性。

7、setHeaderEncoding(String encoding)方法和getHeaderEncoding()方法

这两个方法继承自FileUploadBase类,用于设置和读取字符编码。需要注意的是,如果没有使用setHeaderEncoding()设置字符编码,则getHeaderEncoding()方法返回null,上传组件会采用HttpServletRequest设置的字符编码。但是,如果HttpServletRequest的字符编码也为null,这时,上传组件将采用系统默认的字符编码。获取系统默认字符编码的方式如下所示:

System.getProperty("file.encoding"));
点击此处
隐藏目录