hbcui1984的专栏
登录
注册
全站
当前博客
空间
博客
好友
相册
留言
利用Jakarta commons fileupload组件实现多文件上传
收藏
利用Jakarta commons fileupload组件实现多文件上传
曾经写过一篇 文章
《利用MultipartFile实现文件上传》
,可是最近在工作中,我需要同时上传多个文件,似乎用MultipartFile就不能胜任了,于是想到了Jakarta commons。Jakarta commons真是不错的,有那么多开源且好用的东东,太方便了。好了,闲话少说,开始介绍一下jakarta commons fileupload组件吧。
首先,需要到其
官网
上下载最新的jar包及其依赖的jar包,然后可以参考一下它的user guide,很简单,想信大家都能看懂,这里就把主要的内容提一下(相当于一个删减的翻译)。
一.基本原理
FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个的FileItem。而对每一个FileItem,FileUpload组件可以判断出它是普通form表单域还是文件file域,从而根据不同的类型,采取不同的操作--如果是表单域,就读出其值,如果是文件域,就保存文件到服务器硬盘上或者内存中。
二.具体实现
对一个HttpRequest请求,我们要判断该请求是否是文件上传的请求
//
Check that we have a file upload request
boolean
isMultipart
=
ServletFileUpload.isMultipartContent(request);
不过,个人觉得这个方法一般不需要,我们一般是在需要上传时才采用fileupload组件处理request请求的。
如果确实是文件上传的请求,我们如何解析该request呢?
//
Create a factory for disk-based file items
FileItemFactory factory
=
new
DiskFileItemFactory();
//
Create a new file upload handler
ServletFileUpload upload
=
new
ServletFileUpload(factory);
//
Parse the request
List
/**/
/*
FileItem
*/
items
=
upload.parseRequest(request);
至此我们已经的到了FileItem的list,对每个Item的处理要考虑是标准的form表单域还是上传文件file域,然后做不同的处理,可以通过以下方式实现:
//
Process the uploaded items
Iterator iter
=
items.iterator();
while
(iter.hasNext())
...
{
FileItem item
=
(FileItem) iter.next();
if
(item.isFormField())
...
{
processFormField(item);
}
else
...
{
processUploadedFile(item);
}
}
对于一个简单的form表单域,我们可以通过以下方法得到该域的相关信息:
//
Process a regular form field
if
(item.isFormField())
...
{
String name
=
item.getFieldName();
String value
=
item.getString();
...
}
而对于一个upload file,我们则可以通过如下方式得到其相关信息:
//
Process a file upload
if
(
!
item.isFormField())
...
{
String fieldName
=
item.getFieldName();
String fileName
=
item.getName();
String contentType
=
item.getContentType();
boolean
isInMemory
=
item.isInMemory();
long
sizeInBytes
=
item.getSize();
...
}
实际上,对于一个上传的文件,我们一般不会把它包存在内存中,除非它足够小。我们一般是把它保存到硬盘上,使用以下方法就可以将上传的文件保存到服务器硬盘上了:
File uploadedFile
=
new
File(...);
item.write(uploadedFile);
好了,到了这里,fileupload组件的基本api已经介绍完了,大家应该有点轮廓了吧?
在下一篇文章中,我会对commons FileUpload组件稍作包装,并做个简单的demo
发表于 @
2007年05月25日 16:04:00
|
评论(
loading...
)
新一篇: 对commons fileupload组件的简单封装
|
旧一篇: 偷懒工具设计之sql2Excel
用户操作
[即时聊天]
[发私信]
[加为好友]
扬州梦
订阅我的博客
扬州梦的公告
ブログパーツ型環境貢献サイト
グリムス(gremz)
http://www.gremz.com
文章分类
ASP
Hibernate
JAVA
linux/unix
mysql
oracle
spring
web开发
XML
读书
模式
软件测试
生活随笔
网络编程
收藏
java站点
存档
2009年07月(3)
2009年06月(3)
2009年05月(1)
2009年02月(1)
2009年01月(2)
2008年12月(1)
2008年11月(1)
2008年10月(1)
2008年09月(2)
2008年07月(2)
2008年05月(1)
2008年01月(2)
2007年12月(1)
2007年10月(1)
2007年07月(2)
2007年06月(3)
2007年05月(7)
2007年04月(6)
2007年02月(2)
2007年01月(7)
2006年12月(8)
2006年11月(13)
2006年10月(10)
2006年09月(9)