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

当我们在 HTML 表单中选择本地文件之后点击“提交”按钮则会将文件上传到服务器中,网站空间,此时该 HTTP 请求正文的数据类型就是 multipart/form-data 型的。而在 Servlet 技术中,该 HTTP 请求会被 Servlet 容器(如 Tomcat)包装成 HttpServletRequest 对象,再由端所请求的相应 Servlet 进行处理。

但是,如果此时我们在服务器端编写的 Servlet 一点点地解析这个 HTTP 请求,分离出其中的文本表单和上传的文件类型,这未免有点低效。于是,我们可以使用 Apache 开源上传软件包 fileupload 来简化这一过程,直接使用即可。下载地址:

在 fileupload 包中, HTTP 请求中的复杂表单元素都被看做一个 FileItem 对象;FileItem 对象必须由 ServletFileUpload 类中的 parseRequest() 方法解析 HTTP 请求(即被包装之后的 HttpServletRequest 对象)出来,即分离出具体的文本表单和上传文件;而 ServletFileUpload 对象的创建需要依赖于 FileItemFactory 工厂将获得的上传文件 FileItem 对象保存至服务器硬盘,即 DiskFileItem 对象。

呼…把这个 fileupload 包中的关系讲得那么乱,最好还是自己看下载下来的帮助文档。不过,香港空间,推荐一个免费的 Java 反编译器 JD-GUI ,用它能够很轻松地打开 .jar 文件,除了源代码中的注释,其他的一览无遗,很好用啊。下载地址:?q=jdgui

好吧,我们的程序要求:

1、提供一个 HTML 文件,用户可在相应表单中选择需要上传的文件;

2、编写一个名叫 UploadServlet 的Servlet 文件,主要功能是解析上面 HTML 表单所提交的 HTTP 请求,把普通的文本域和文件域分离开来;

3、UploadServlet 根据 web.xml 配置文件中的初始化参数确定好需要在 Web 服务器存放该文件的目录,将上传的文件写入到该存放目录中,在我的这里我把上传的文件保存到 F:\java\JavaWeb\ch05\uploadFile 目录中,而 F:\java\JavaWeb\ch05\temp 目录则用作该 Web 应用的临时目录。

程序代码:

upload.html 文件

UploadServlet.java 文件

web.xml 文件

程序运行过程截图:(在 web.xml 文件中我们把UploadServlet 映射为 upload)

1、启动 Tomcat ,在浏览器输入 URL 并填写 HTML 表单,如下:

2、点击“上传”,发出一个包含了上传文件的复杂 HTTP 请求,由 UploadServlet 进行处理:

先看下 Tomcat 的控制台输出信息:

再看一下浏览器的相应输出:

最后看上传的文件是否被被保存在指定的目录中:

嗯,文件目录和文件保存时间都正确,就是文件大小忘了转化一下…(*^__^*) …

小结:

1、使用开源的 fileupload 包为我们在 UploadServlet 代码中显式地用繁杂的 request.getParameter(“username”) 语句来获取 HTTP 请求所包含的表单值;

2、而且还省去了我们在 UploadServlet 中自己编写判断表单是否是文件或文本类型的代码;

3、更重要的是,FileItem 对象的响应方法可以使得我们轻松地获取文件名、文件大小、路径等等;

4、最重要的是,使用 JD-GUI 反编译器简单地看看开源的 fileupload 包中的类组织结构,香港空间,这更加有意思、有用处,:-D

本文出自 “蚂蚁” 博客,请务必保留此出处

一定要成为你工作最大的资产。

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

相关文章:

你感兴趣的文章:

标签云: