利用Jakarta commons fileupload组件实现多文件上传(原理)

转载 2007年09月12日 13:44:00
         曾经写过一篇 文章《利用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呢?

         至此我们已经的到了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
 

相关文章推荐

利用commons-fileupload组件实现文件上传-实例

一、所需要的包: 1、commons-fileupload-1.2.1.jar: 下载地址 http://commons.apache.org/downloads/download_fi...

利用commons-fileupload组件实现文件上传-实例

一、所需要的包:1、commons-fileupload-1.2.1.jar:下载地址http://commons.apache.org/downloads/download_fileupload.c...
  • penjian
  • penjian
  • 2011年05月27日 14:40
  • 305

《Java》----详解用apache的commons-fileupload组件实现文件上传

在web开发中,文件上传功能是很普遍的,我们最常见的就是上传图片了,还有上传Excel,今天小编给大家分享一下利用apache的组件实现文件上传功能。     文件上传总体思路     我们想要将磁盘...

使用Commons-fileupload组件实现文件上传

文件的上传 一  概念 1.实现web开发中的文件上传功能,需完成如下二个步骤: (1)在web页面中添加上传输入项(jsp页面或html页面) (2)在 servlet中读取上传文件的数据,...

JSP使用commons-fileupload组件实现文件上传代码示例

这篇文章主要介绍了JSP使用commons-fileupload组件实现文件上传代码示例,具有一定的参考价值,具体内容如下1、准备:将commons-fileupload-1.1.zip和common...
  • xz_src
  • xz_src
  • 2017年07月19日 07:04
  • 257

利用apache的Commons-fileupload和Ajax实现文件上传进度条

实现思路: 1、
  • b671900
  • b671900
  • 2014年09月29日 17:19
  • 1866
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用Jakarta commons fileupload组件实现多文件上传(原理)
举报原因:
原因补充:

(最多只允许输入30个字)