当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

<b>Struts2文件上传(二) 深化FileUploadInterceptor</b>[Java编程]

赞助商链接



  本文“<b>Struts2文件上传(二) 深化FileUploadInterceptor</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

Struts2框架本身没有文件上传的功效模块,而是操纵目前风行的几个文件上传开源框架,如Common -FileUpload和COS等. Struts2操纵拦阻器将这些文件上传的框架巧妙的集成进来,不能不被称为一个 优异的拿来主义者.由于拦阻器的利用,我们利用Struts2实现文件上传变的非常简单,仿佛什么也没发生,文件已经上传到服务器了,但假如仅仅是利用这个功效,大概永久不知道Struts2为你做了多少事情 .近来有点闲,解析了下下Struts2源码,才弄清楚此中的本相,笔记一下,免得忘记.

Struts2操纵request解析器来集成其他的文件上传框架,Struts2供应了默许的request解析器 JakartaMultiPartRequest,在default.properties的struts.multipart.parser参数就是配置request解 析器,默许为jakarta也就是JakartaMultiPartRequest.当然,你也可以设置成cos,不过Struts2 没有 供应适配cos的request解析器,你得自己实现,然后配置到自己的利用.JakartaMultiPartRequest也就 是操纵 Common-FileUpload来对request举行解析,然后保存解析后果.具体工作就是操纵Common- FileUpload的 ServletFileUpload对request举行解析,得到全部的FileItem的list,然后对这个list进 行解析.假如是文件上传表单,则以表单的name属性分组,以表单name属性为key,对应的FileItem列表 为Value保存到一个Map中.JakartaMultiPartRequest的工作已经完成,当然,这个Map中保存的全部的 FileItem,框架已经将文件保存到一个暂时目录里了,这个暂时目录你也可以配置,参数为struts.multipart.saveDir,还要配置一个文件上传总大小,参数为 struts.multipart.maxSize.

接着就是FileUploadInterceptor的工作了,他的工作也非常简单.首先举行考证,如文件上传 大小限制,上传范例限制考证等.然后以表单名来构造三个参数,比方:你的文件上传表单name为 upload,则这三个参数为:upload,uploadContentType,uploadFileName.然后保存到ActionContext的 PARAMETERS 中,当然假如表单很多,并且表单名又差别,他就会产生差别表单名对应的参数.最后系统 的ParametersInterceptor拦阻器会将 ActionContext的getParameters()得到的各个参数映射赋值给 Action的各个属性,这就是为什么我们在开辟文件上传的时刻一定要在Action中供应与表单名相同的 File对象(假如一个表单名又多个上传文件,这是可以是File数组或是File的List),文件名 +ContentType,和文件名+FileName 这三种参数.

框架为我们所做的就是这些了,剩下的就是文 件拷贝了.目前我们来注意下Action的这几个参数,此中File对象(当然也大概是数组或List),这时他 们已经指向系统暂时目录里的某个文件,或是系统的内存里的数据了.在我们传输数据时,实际上是从 这个暂时文件或内存将数据库拷贝到上传目录里去的,当履行完Action之后,FileUploadInterceptor会 将暂时目录里全部暂时文件删除,这也是为什么上传文件完成后会有一些日记显示说删除了一些暂时文 件的缘由.

目前实现一个简单的文件上传,首先熟习下几个参数配置:

1.struts.multipart.parser  配置request解析器,Struts2默许为jakarta 也就是 JakartaMultiPartRequest,我们也 可以自己开辟自己的解析器.

2.struts.multipart.saveDir   上传文件的暂时保存目录,我们知道Common-FileUpload需求供应一个暂时目录的.假如没有设置, 则是 ServletContext.getAttribute("javax.servlet.context.tempdir")对应的目录,对应于 Common- FileUpoad中的repository参数.

3.struts.multipart.maxSize 这个是配置文件上传总大小,单 位为B,默许大小为2097152b,对应于Common-FileUpload中的sizeMax参数.

在配置 FileUploadInterceptor时刻也有几个参数:

1.maximumSize  这是设置答应上传的单个文件的 大小,假如某个文件大小大于这个大小,则会产生一个错误保存到Action中,错误的i18n的key为 struts.messages.error.file.too.large

2.allowedTypesSet 这是设置答应上传文件的范例,多 个范例以逗号“,”离隔,假如某个文件的范例没在这个设置之类,则会产生一个错误保存 到Action中,错误的i18n的的key为 struts.messages.error.content.type.not.allowed

3.allowedExtensionsSet这是设置答应上传 文件的后缀,多个范例以逗号“,”离隔,假如某个文件的后缀没在这个设置之类,则会产 生一个错误保存到Action中,错误的i18n的的key为 struts.messages.error.file.extension.not.allowed

struts.xml配置示例:

Xml代码

<struts>
//配置文件保存的暂时目录
<constant  name="struts.multipart.saveDir" value="C:\Documents and Settings\bond\My  Documents\temp"></constant>

//配置上传总大小
<constant  name="struts.multipart.maxSize" value="1024102400"></constant>

<package name="strutsDemo" extends="struts-default">

<action  name="Upload" method="upload" class="com.bond.action.LoginAction">
//文件上传的保 存目录
<param name="savePath">/upload</param>
<result  name="success">/success.jsp</result>
<result  name="error">/failure.jsp</result>
<interceptor-ref  name="fileUpload">
//单个文件答应的大小
<param  name="maxinumSize">10240000000</param>
//答应上传的文件范例,可以到% Tomcat_home%/conf下的web.xml文件中找到全部文件范例的范例名
<param  name="allowedTypesSet">application/zip,application/pdf,image/gif</param>
</interceptor-ref>
<interceptor-ref  name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>

这里我们配置了fileUpload拦阻器,我们还 必须吧dufaultStack加上,由于defaultStack中已经包含了fileUpload拦阻器,所以fileUpload拦阻器 会履行俩遍,所以我们会在日记信息中看到俩次排除暂时文件的记录.


  以上是“<b>Struts2文件上传(二) 深化FileUploadInterceptor</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .