`
webcode
  • 浏览: 5940268 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

利用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请求,我们要判断该请求是否是文件上传的请求
//Checkthatwehaveafileuploadrequest
booleanisMultipart=ServletFileUpload.isMultipartContent(request);
不过,个人觉得这个方法一般不需要,我们一般是在需要上传时才采用fileupload组件处理request请求的。
如果确实是文件上传的请求,我们如何解析该request呢?
至此我们已经的到了FileItem的list,对每个Item的处理要考虑是标准的form表单域还是上传文件file域,然后做不同的处理,可以通过以下方式实现:
//Processtheuploadeditems
Iteratoriter=items.iterator();
while(iter.hasNext())...{
FileItemitem
=(FileItem)iter.next();

if(item.isFormField())...{
processFormField(item);
}
else...{
processUploadedFile(item);
}

}
对于一个简单的form表单域,我们可以通过以下方法得到该域的相关信息:
//Processaregularformfield
if(item.isFormField())...{
Stringname
=item.getFieldName();
Stringvalue
=item.getString();
...
}
而对于一个upload file,我们则可以通过如下方式得到其相关信息:
//Processafileupload
if(!item.isFormField())...{
StringfieldName
=item.getFieldName();
StringfileName
=item.getName();
StringcontentType
=item.getContentType();
booleanisInMemory=item.isInMemory();
longsizeInBytes=item.getSize();
...
}
实际上,对于一个上传的文件,我们一般不会把它包存在内存中,除非它足够小。我们一般是把它保存到硬盘上,使用以下方法就可以将上传的文件保存到服务器硬盘上了:
FileuploadedFile=newFile(...);
item.write(uploadedFile);
好了,到了这里,fileupload组件的基本api已经介绍完了,大家应该有点轮廓了吧?
在下一篇文章中,我会对commons FileUpload组件稍作包装,并做个简单的demo
分享到:
评论

相关推荐

    Jakarta Commons FileUpload 用户指南

    Jakarta Commons FileUpload 用户指南

    jakarta-commons 相关依赖包

    jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...

    适配Jakarta的FileUpload

    修改部分了源代码,可以无缝适配Jakarta,可以在Tomcat10或JAVAEE9以上使用,其参照版本为commons-fileupload-1.4

    jar包jakarta-taglibs-standard-1.1.2和commons-fileupload-1.3.2和commons-io-2.5

    jar包jakarta-taglibs-standard-1.1.2和commons-fileupload-1.3.2和commons-io-2.5

    Jakarta Commons使用

    Jakarta Commons使用,方便自己看看的东西。。

    commons-fileupload-1.2.1

    这是jakarta提供的commons fileupload组件的jar包和API文档,fileupload组件可以很好的支持文件的上传。

    Apache Jakarta Commons 使用手册

    介绍了Apache Jakarta Commons 项目下Java组件,如FileUpload, HttpClient, DBCP,BeanUtils,Logging,Lang, 以及 Collections,Codec等,是学习和使用Apache Jakarta Commons良好的参考使用手册。

    Jakarta commons docs API CHM 格式

    commons-fileupload 使得在你可以在应用和Servlet中容易的加入强大和高性能的文件上传能力 commons-io 用来帮助进行IO功能开发.它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-...

    apache-jakarta旗下的所有开源项目jar文件

    apache-jakarta-commons-fileupload.jar apache-jakarta-commons-httpclient.jar apache-jakarta-commons-io.jar apache-jakarta-commons-lang.jar apache-jakarta-commons-logging-adapters.jar apache-jakarta-...

    适用于tomecat10的Fileupload

    在commons-fileupload1.4更高版本更新前可以暂时适应Javax改为jakarta,目前jar包修改了引用类,将原有Servlet*改为JakSrvlt*即可使用,例如 ServletFileUpload改为JakSrvltFileUpload,即可在JavaEE8+以及Tomcat10...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小。 -下载后解压zip包,将commons-fileupload-1.1.1.jar,和commons-io-1.2.jar(这里我们用的是更新的版本,但是用法是一样的)复制到tomcat的webapps...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-fileupload 使得在你可以在应用和Servlet中容易的加入强大和高性能的文件上传能力 commons-io 用来帮助进行IO功能开发.它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-...

    apache-commons源码及jar文件

    FileUpload 使得在你可以在应用和Servlet中容易的加入强大和高性能的文件上传能力 HttpClient Commons-HttpClient 提供了可以工作于HTTP协议客户端的一个框架. IO IO 是一个 I/O 工具集 Jelly Jelly是一个基于 ...

    fy-commons-fileupload-1.4.jar

    将源码中javax改为jakarta后重新编译

    commons-upload (适用Tomcat10及Java8+)

    将 commons-fileupload1.4 中的引用类 javax.* 修改为 jakarta.* ,支持Java8及Tomcat10以上运行。 使用方法:将Servlet*改为JakSrvlt*,例如 ServletFileUpload 改为 JakSrvltFileUpload 参考博主:...

    实现Struts上传多个文件

    要求JDK1.5以上,lib库要包含如下jar文件:antlr.jar,commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-fileupload.jar,commons-logging.jar,commons-validator.jar,jakarta-oro...

    commons-fileupload-1.2.1.jar commons-io-1.4.jar

    Struts2本身没有自带的两个jar 如果不导入的话会有Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]异常

    tomcat10升级单个jar里面的jakarta.servlet.http.HttpServletRequest

    执行步骤:java -jar jakartaee-migration-1.0.1.jar commons-fileupload-1.4.jar commons-fileupload-1.5.jar 说明:java -jar jakartaee-migration-*-shaded.jar <source> <destination> 源应该是压缩存档、...

    commons-io-1.3.1.jar和commons-io-1.3.1.jar

    Struts2默认使用的是Jakarta的Common-FileUpload框架来上传文件,因此,要在web应用中增加两个Jar文件:commons-fileupload-1.2.jar和commons-io-1.3.1.jar。它在原上传框架上做了进一步封装,简化了文件上传的代码...

Global site tag (gtag.js) - Google Analytics