2024年4月26日发(作者:)
Commons-fileupload工具的API与开发实例解析(一)
文件上传组件的应用与编写在许多Web站点应用中都需要为用户提供通过浏
览器上传文档资料的功能,例如,上传邮件附件、个人相片、共享资料等。对文
件上传功能,在浏览器端提供了较好的支持,只要将FORM表单的enctype属性
设置为“multipart/form-data”即可;但在Web服务器端如何获取浏览器上传
的文件,需要进行复杂的编程处理。为了简化和帮助Web开发人员接收浏览器上
传的文件,一些公司和组织专门开发了文件上传组件。本章将详细介绍如何使用
Apache文件上传组件,以及分析该组件源程序的设计思路和实现方法。
1.1 准备实验环境
按下面的步骤为本章的例子程序建立运行环境:
(1)在Tomcat 5.5.12的
fileupload的子目录,并在fileupload目录中创建一个名为的网页
文件,在该文件中写上“这是页面的原始内容!”这几个字符。
(2)在
的子目录,在WEB-INF目录中创建一个名为classes的子目录和一个
文件,文件内容如下:
(3)要使用Apache文件上传组件,首先需要安装Apache文件上传组件包。在
的子目录,然后从网址/commons/fileupload下载
到Apache组件的二进制发行包,在本书的附带带光盘中也提供了该组件的二进
制发行包,文件名为。从
压缩包中解压出文
件,将它放置进
中,就完成了Apache文件上传组件的安装。
(4)在
目录,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虚拟机默认可以使用的内存空间是有限的(笔者测
发布评论