2024年4月26日发(作者:)

Commons-fileupload工具的API与开发实例解析(一)

文件上传组件的应用与编写在许多Web站点应用中都需要为用户提供通过浏

览器上传文档资料的功能,例如,上传邮件附件、个人相片、共享资料等。对文

件上传功能,在浏览器端提供了较好的支持,只要将FORM表单的enctype属性

设置为“multipart/form-data”即可;但在Web服务器端如何获取浏览器上传

的文件,需要进行复杂的编程处理。为了简化和帮助Web开发人员接收浏览器上

传的文件,一些公司和组织专门开发了文件上传组件。本章将详细介绍如何使用

Apache文件上传组件,以及分析该组件源程序的设计思路和实现方法。

1.1 准备实验环境

按下面的步骤为本章的例子程序建立运行环境:

(1)在Tomcat 5.5.12的webapps目录中创建一个名为

fileupload的子目录,并在fileupload目录中创建一个名为的网页

文件,在该文件中写上“这是页面的原始内容!”这几个字符。

(2)在webappsfileupload目录中创建一个名为WEB-INF

的子目录,在WEB-INF目录中创建一个名为classes的子目录和一个

文件,文件内容如下:

(3)要使用Apache文件上传组件,首先需要安装Apache文件上传组件包。在

webappsfileuploadWEB-INF目录中创建一个名为lib

的子目录,然后从网址/commons/fileupload下载

到Apache组件的二进制发行包,在本书的附带带光盘中也提供了该组件的二进

制发行包,文件名为。从

压缩包中解压出文

件,将它放置进webappsfileuploadWEB-INFlib目录

中,就完成了Apache文件上传组件的安装。

(4)在webappsfileupload目录中创建一个名为src的子

目录,src目录用于放置本章编写的Java源程序。为了便于对 Servlet源文件

进行编译,在src目录中编写一个批处理文件,如例程1-1所示。

例程1-1

set PATH=C:jdk1.5.0_01bin;%path%

set

CLASSPATH=C:;C:tomcat-5.5.1

;%CLASSPA

TH%

javac -d ..WEB-INFclasses %1

pause

在批处理文件中要注意将文件的路

径加入到CLASSPATH环境变量中和确保编译后生成的class文件存放到

安装目录>webappsfileuploadWEB-INFclasses目录中,上面的CLASSPATH

环境变量的设置值由于排版原因进行了换行,实际上不应该有换行。接着在src

目录中为文件创建一个快捷方式,以后只要在Windows资源管理器

窗口中将Java源文件拖动到 文件的快捷方式上,就可以完成Java

源程序的编译了。之所以要创建文件的快捷方式,是因为直接将

Java源程序拖动到批处理文件时,批处理文件内编写

的相对路径不被支持。

(4)启动Tomcat,在本地计算机的浏览器地址栏中输入如下地址:

localhost:8080/fileupload/

验证浏览器能够成功到该网页文档。如果浏览器无法访问到该网页文档,请检查

前面的操作步骤和改正问题,直到浏览器能够成功到该网页文档为止。

(5)为了让/fileupload这个WEB应用程序能自动重新装载发生了修改的Servlet

程序,需要修改Tomcat的文件,在该文件的元素中增加如下

一个子元素:

reloadable="true"/>

保存文件后,重新启动Tomcat。

1.2 Apache文件上传组件的应用

Java Web开发人员可以使用Apache文件上传组件来接收浏览器上传的文件,

该组件由多个类共同组成,但是,对于使用该组件来编写文件上传功能的Java

Web开发人员来说,只需要了解和使用其中的三个类:DiskFileUpload、FileItem

和FileUploadException。这三个类全部位于load

包中。

1.2.1查看API文档

在准备实验环境时获得的文件的解压缩目录

中可以看到一个docs的子目录,其中包含了Apache文件上传组件中的各个API

类的帮助文档,从这个文档中可以了解到各个API类的使用帮助信息。打开文件

上传组件API帮助文档中的页面,在左侧分栏窗口页面中列出了文

件上传组件中的各个API类的名称,在右侧分栏窗口页面的底部列出了一段示例

代码。读者不需要逐个去阅读图1.2中列出的各个API类的帮助文档,而应该以

图1.2中的示例代码为线索,以其中所使用到的类为入口点,按图索骥地 进行

阅读,对于示例代码中调用到的各个API类的方法则应重点掌握。

1.2.2 DiskFileUpload类

DiskFileUpload类是Apache文件上传组件的核心类,应用程序开发人员通过这

个类来与Apache文件上传组件进行交互。下面介绍DiskFileUpload类中的几个

常用的重要方法。

1.setSizeMax方法

setSizeMax方法用于设置请求消息实体内容的最大允许大小,以防止客户端故

意通过上传特大的文件来塞满服务器端的存储空间,单位为字节。其完整语法定

义如下:

public void setSizeMax(long sizeMax)

如果请求消息中的实体内容的大小超过了setSizeMax方法的设置值,该方法将

会抛出FileUploadException异常。

2.setSizeThreshold方法

Apache文件上传组件在解析和处理上传数据中的每个字段内容时,需要临时保

存解析出的数据。因为Java虚拟机默认可以使用的内存空间是有限的(笔者测