书山有路勤为径,学海无涯苦作舟
Struts2默认使用Jakarta的Common-FileUpload的文件上传解析器。见struts.properties配置文件中:
实际上,Struts2的文件上传功能只是在原有的文件上传项目上做了进一步的封装,取消了不同文件上传项目的编程差异而已。
上面的Action和普通的Action没有任何区别。只是多了几个属性而已。如果表单中包含一个name属性为xxx的文件域,则对应的Action需要使用3个属性来封装该文件域的信息:类型为File的xxx属性封装了该文件的内容;类型为String的xxxFileName属性封装了该文件域对应的文件的文件名;类型为String的xxxContentType属性封装了该文件域对应的文件类型。除此之外,配置了savePath来依赖注入文件上传后的保存地址。具体的Action配置如下:
一般我们上传文件都不是无限制地上传的,需要制定一些例如文件类型,文件大小等限制。我们可以通过配置Struts2中的拦截器进行文件过滤。Struts2中文件上传的拦截器是fileUpload。配置fileUpload拦截器,可以为其指定两个参数:
allowedTypes:该参数指定允许上传文件的类型,多了文件类型之间以英文逗号隔开。
maximuxSize:该参数指定允许上传文件大小,单位是字节。
通过配置fileUpload拦截器,可以轻松地实现文件过滤,当文件过滤失败后,系统自动转入input视图。当然,我们必须显式地为该Action配置defaultStack的拦截器引用。
如果需要使用Pell上传, 需要使用插件struts2-pell-multipart-plutin-2.1.6.jar文件。此压缩包中有一个PellMultiPartRequest类。同时在struts-plugin.xml中有如下Bean配置:
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="pell" class="org.apache.struts2.dispatcher.multipart.PellMultiPartRequest" /> 指明了解析接口的实现类。有了这个声明,我们只需在struts.xml中显式地声明一下sturts.multipart.parser的值为pell即可:
<constant name="struts.multipart.parser" value="pell"/>
说道此处,上传基本说完了。如果需要同时上传多了文件,只要将Action中涉及文件上传的属性声明为数组或List即可。
Struts2的文件下载也和普通Action没有区别,只是返回的是InputStream流而已。
代码很简单,关键是需要配置stream类型的结果。配置stream类型的结果需要指定如下4个属性:
posted on 2010-11-07 14:19 Brian 阅读(465) 评论(0) 编辑 收藏 所属分类: Struts2