Struts 2.0 文件上传/下载

文件上传

基本原理

        上传文件是由FileUploadInterceptor实现的,基本原理是这样的,FileUploadInterceptor会从上传的数据中解析出 上传的文件名称,文件类型和文件内容,调用Action相应的方法进行设置。

        假定上传表单中File控件的名称是upload,则Action必须实现如下三个设值方法:

setUploadFile……保存上传的文件内容
setUploadFileName……保存上传的文件名称
setUploadContentType……保存上传的文件类型

        拦截器支持针对上传表单同一名称的文件控件有多个的情况,也就是同时上传多个文件,此时要求上述方法的参数是一个列表或者数组,下面描述同时上传多个文件的实现步骤:

构建上传表单

        下面的示例代码中,名称为upload的File控件有多个,表示要同时上传多个文件。

  1. <s:form></s:form>"upload" action="customer/upload.action" method="POST"  
  2.  enctype="multipart/form-data">   
  3.  <s:file></s:file>"File (1)" name="upload" />   
  4.  <s:file></s:file>"File (2)" name="upload" />   
  5.  <s:file></s:file>"FIle (3)" name="upload" />   
  6.  <s:submit>   </s:submit>
  7.   

实现Action

        这里重点列举必须实现的三个设值方法,我们可以注意到,方法名称是单数形式,但是参数是一个列表。

java 代码
  1. public void setUploadContentType( List<string> uploadContentTypes)   </string>
  2. {   
  3.     this.uploadContentType = uploadContentTypes;   
  4. }   
  5.   
  6. public void setUploadFileName( List<string> uploadFileNames)   </string>
  7. {   
  8.     this.uploadFileName = uploadFileNames;   
  9. }   
  10.   
  11. public void setUpload( List<file> uploads)   </file>
  12. {   
  13.     this.upload = uploads;   
  14. }   
配置拦截器

        具体的配置不再赘述,需要提一下的是此拦截器支持allowTypes和maximumSize属性,支持限制文件类型及文件大小。

        另外在捕获错误时,会设置几个字段错误,字段错误的消息可以在资源文件中配置,支持的三种错误类型的键值如下:

struts.messages.error.uploading……当文件不能被上传时的错误信息。
struts.messages.error.file.too.large……文件大小超限时的错误信息。
struts.messages.error.content.type.not.allowed……文件类型不允许时的错误信息。

全局配置

        可以在struts.properties文件中设置上传文件保存的临时目录,最大大小等。

下载

        下载是通过StreamResult类来实现,这是一个自定义结果类型,主要作用是直接向HttpServletResponse对象发送原始数据。 StreamResult假定Action会提供一个输入流的访问方法,并将这个输入流输出到响应对象中。

        SteamResult还提供如下配置属性。

contentType……发送数据的MIME类型,比如text/plain
contentLength……内容长度,单位为字节,浏览器会基于此值显示进度条
contentDispostion……设置响应头Content-disposition的值,缺省为inline
bufferSize……从输入流中读取到输出流的缓存大小
inputName……action中提供输入流的属性名称,缺省为inputStream

下面是一个StreamResult的配置示例:

xml 代码
  1. <action name="download2" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">  
  2.     <param name="inputPath">\images\struts-gif.zip</param>  
  3.     <result name="success" type="stream">  
  4.         <param name="contentType">application/zip</param>  
  5.         <param name="inputName">inputStream</param>  
  6.         <param name="contentDisposition">filename="struts-gif.zip"</param>  
  7.         <param name="bufferSize">4096</param>  
  8.     </result>  
  9. </action>  

        注意:Result对象中可以通过OGNL语法访问值堆栈,这意味着可以通过Action或其他方式传递值来设置Result配置参数,比如上述配置中contentDisposition通常是动态的,这可以通过action传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值