利用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
 

Java开发人员必备的资料:Apache Jakarta Commons工具包

Java开发人员必备的资料:Apache Jakarta Commons 资源简介 Jakarta commons docs API CHM 格式带索引和全文搜索,方便携带和查询。 ...
  • zolalad
  • zolalad
  • 2014年06月04日 20:59
  • 2496

apache的开源工具common-fileupload实现文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。   对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如...
  • qq_24053795
  • qq_24053795
  • 2016年01月29日 16:52
  • 5284

java积累——apache commons fileupload 实现文件上传

引言    之前在做.net项目的时候经常会遇到文件上传和下载的需求,现在在java中同样有了这样的需求,其实做法 和.net差不多都是采用了第三方的东西来实现,今天就利用apac...
  • u013045437
  • u013045437
  • 2016年08月20日 20:14
  • 1902

apache commons-fileupload实现进度条大文件批量上传

实现带进度条的文件上传有多种实现方式,之前看到一种是通过flash插件的方式实现上传(推荐SWFUpload,它是一个flash和js相结合的上传插件),这里我们采用Apache上传组件commons...
  • huanjileaimeidan
  • huanjileaimeidan
  • 2017年03月22日 14:43
  • 1127

JSP 文件上传下载系列之二[Commons fileUpload]

关于JSP 文件上传的基础和原理在系列一中有介绍到。 这里介绍一个很流行的组件commons fileupload,用来加速文件上传的开发。 官方的介绍是: 让添加强壮,高性能的文件到你的serv...
  • oscar999
  • oscar999
  • 2013年09月17日 19:37
  • 3697

JAVA使用apache commons-fileupload组件完成文件上传到服务器功能

本案主要完成使用阿帕奇commons-fileupload组件完成文件上传功能(浏览器端上传到服务器) 1 首先准备这两个apache组件导入项目 2 前端页面简单写了写 其中要注意的地方...
  • java_raylu
  • java_raylu
  • 2017年06月24日 14:14
  • 708

commons-fileupload实现文件上传、下载、在线打开

最近做了一个文件上传、下载、与在线打开文件的功能,刚开始对文件上传的界面中含有其它表单(例如输入框、密码等)在上传的过程中遇到了许多问题,下面我写了一个同时实现文件上传、下载、在线打开文件的测试程序。...
  • jefry_xdz
  • jefry_xdz
  • 2013年03月12日 22:56
  • 12530

apache commons fileupload 处理文件上传的两种方式(流式和非流式)

  • WXLHATYY
  • WXLHATYY
  • 2014年12月31日 15:16
  • 2163

利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作

虽然现在出现了很多ORM框架,可是还是有很多朋友也许还在使用JDBC,就像我现在一样,除了学习的时候在使用Hibernate、Spring类似这些优秀的框架,工作时一直都在使用JDBC。本文就简单介绍...
  • jasontome
  • jasontome
  • 2013年02月05日 11:42
  • 287

Commons 组件学习笔记

目录目录 Commons 组件在apache官网有详细的资料深入学习的可以在官网查询API及相关资料 Commons 介绍 Commons Lang 组件简介 数组元素的增加 AarryUtils类 ...
  • qq_28334041
  • qq_28334041
  • 2017年04月02日 09:48
  • 548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用Jakarta commons fileupload组件实现多文件上传(原理)
举报原因:
原因补充:

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