`
wtnhwbb
  • 浏览: 163974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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传递。

分享到:
评论
4 楼 xtaywang8 2011-05-25  
properties文件中
3 楼 Sellby 2008-11-10  
项目里正好要用,谢谢
2 楼 hunanxiaohuo 2008-09-03  
                                  
1 楼 lin_zy 2008-01-17  
[url][/url]
[img][/img]

相关推荐

Global site tag (gtag.js) - Google Analytics