知识大全 struts2实现文件下载

Posted 文件

篇首语:记忆的坐标有多么清晰,前进的脚步就有多么坚定。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 struts2实现文件下载相关的知识,希望对你有一定的参考价值。

   使用Struts 控制文件下载 可能很多人会觉得 文件下载太简单 直接在页面上给出一个超级链接 该链接的href属性等于要下载文件的文件名 不就可以实现文件下载了吗?大部分时候的确可以实现文件下载 但如果该文件的文件名为中文文件名 则会导致下载失败 或者应用程序需要在让用户下载之前进行进一步检查 比如判断用户是否有足够权限来下载该文件等       看下面的一个原始的下载页面代码片段 <h >原始的下载</h > <ul><li> <! 包含中文文件名的下载链接 > 下载Struts 的Logo <a images/中 gif >下载图形文件</a> </li><li> 下载Struts 的Logo的压缩文件 <a >下载压缩文件</a> </li></ul> 上面页面的包含两个下载的超级链接 两个链接的资源都是存在的 但因为第一个资源文件的文件名是中文文件名 如果单击第一个超级链接 将出现如下图所示的页面 从图中页面中椭圆形框包围的地方 我们看到被下载的文件名变成了包含大量%的字符串 很明显 这种文件名显然无法取得需要下载的文件 为了解决这个问题 我们使用Struts 的文件下载支持来下载该文件

   实现文件下载的Action Struts 的文件下载Action与普通的Action并没有太大的不同 仅仅是该Action需要提供一个返回InputStream流的方法 该输入流代表了被下载文件的入口 该Action类的代码如下 public class FileDownloadAction implements Action //该属性是依赖注入的属性 该属性可以在配置文件中动态指定该属性值 private String inputPath; //依赖注入该属性值的setter方法 public void setInputPath(String value) inputPath = value; /* 下载用的Action应该返回一个InputStream实例 该方法对应在result里的inputName属性值为targetFile */ public InputStream getTargetFile() throws Exception return ServletActionContext getServletContext() getResourceAsStream(inputPath); //处理用户请求的execute方法 该方法返回success字符串 public String execute() throws Exception return SUCCESS; 从上面的Action中看到 该Action中包含了一个getTargetFile()方法 该方法返回一个InputStream输入流 这 个输入流返回的是下载目标文件的入口 该方法的方法名为getTargetFile 表明该Action有一个targetFile属性来返回下载文件 一旦我们定义了该Action 就可通过该Action来实现文件下载

   配置Action 配置该文件下载的Action与配置普通的Action并没有太大的不同 需要在配置普通Action的基础之上 在加上额外的download的拦截器引用 除此之外 关键是需要配置一个类型为stream的结果 配置stream类型的结果时需要指定如下四个属性 ? contentType 指定被下载文件的文件类型 ? inputName 指定被下载文件的入口输入流 ? contentDisposition 指定下载的文件名 ? bufferSize 指定下载文件时的缓冲大小 因为stream结果类型的逻辑视图是返回给客户端一个输入流 因此无需指定location属性 提示 配置stream类型的结果时 因为无需指定实际的显示的物理资源 所以无需指定location属性 只需要指定inputName属性 该属性指向被下载文件 下面是配置该下载所用的Action类的配置文件片段 <?xml version= encoding= GBK ?> <! 指定Struts 配置文件的DTD信息 > <!DOCTYPE struts PUBLIC //Apache Sofare Foundation//DTD Struts Configuration //EN dtd > <struts> <! 配置Struts 国际化资源文件的baseName > <constant name= struts custom i n resources value= globalMessages /> <! 配置Struts 应用的编码集 > <constant name= struts i n encoding value= GBK /> <package name= lee extends= struts default > <! 配置下载的拦截器引用 > <default action ref name= download /> <action name= download class= lee FileDownloadAction > <! 指定被下载资源的位置 > <param name= inputPath >\\images\\中 gif</param> <! 配置结果类型为stream的结果 > <result name= success type= stream > <! 指定下载文件的文件类型 > <param name= contentType >image/gif</param> <! 指定下载文件的文件位置 > <param name= inputName >targetFile</param> <param name= contentDisposition >filename= struts gif </param> <! 指定下载文件的缓冲大小 > <param name= bufferSize > </param> </result> </action> </package> </struts> 如果通过上面的Struts 提供文件下载支持来实现文件下载 就可以实现包含中文文件名的文件下载

  上面的下载的方式没有办法动态的给定文件名 于是就将上面的方法进行了改进

  首先struts xml配置文件如下

  view plaincopy to clipboardprint?    <! 文件下载 >

  <action name= filedown class= actions FileDownActions >

  <param name= inputPath >/upload/</param>

  <result name= success type= stream >

  <param name= contentType >image/gif</param>

  <param name= inputName >targetFile</param>

  <param name= contentDisposition >filename= download gif </param>

  <param name= bufferSize > </param>

  </result>

  </action>

  <! 文件下载 >

  <action name= filedown class= actions FileDownActions >

  <param name= inputPath >/upload/</param>

  <result name= success type= stream >

  <param name= contentType >image/gif</param>

  <param name= inputName >targetFile</param>

  <param name= contentDisposition >filename= download gif </param>

  <param name= bufferSize > </param>

  </result>

  </action>再就是中加入

  <a >download</a>

  下面给出FileDownActions的代码

  view plaincopy to clipboardprint?    package actions;

  import java io InputStream;

  import apache struts ServletActionContext;

  import opensymphony xwork ActionSupport;

  public class FileDownActions extends ActionSupport

  private String download;

  private String inputPath;

  public String getInputPath()

  return inputPath;

  

  public void setInputPath(String inputPath)

  this inputPath = inputPath;

  

  public String getDownload()

  return download;

  

  public void setDownload(String download)

  this download = download;

  

  public InputStream getTargetFile() throws Exception

  

  return ServletActionContext getServletContext() getResourceAsStream(inputPath+download);

  

  public String execute()

  return SUCCESS;

  

  

  package actions;

  import java io InputStream;

  import apache struts ServletActionContext;

  import opensymphony xwork ActionSupport;

  public class FileDownActions extends ActionSupport

  private String download;

  private String inputPath;

  public String getInputPath()

  return inputPath;

  

  public void setInputPath(String inputPath)

  this inputPath = inputPath;

  

  public String getDownload()

  return download;

  

  public void setDownload(String download)

  this download = download;

  

  public InputStream getTargetFile() throws Exception

  

  return ServletActionContext getServletContext() getResourceAsStream(inputPath+download);

  

  public String execute()

  return SUCCESS;

  

cha138/Article/program/Java/ky/201311/28254

相关参考

知识大全 Struts2的properties配置文件详解

Struts2的properties配置文件详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!##

知识大全 修改Struts2的struts.xml配置文件位置

修改Struts2的struts.xml配置文件位置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 教你如何配置Struts2 web.xml文件

教你如何配置Struts2web.xml文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  St

知识大全 Struts2在IE7下不能下载的解决方案

Struts2在IE7下不能下载的解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 struts2文件上传的采用的三种方式解析

   文件上传几乎是每个项目实现的一个必须的模块  上传就是将信息从个人计算机(本地计算机)传递到中央计算机(远程计算机)系统上让网络上的人都能看到将制作好的网页文字图片等发布到互联网上去以

知识大全 spring struts2 ibatis框架整合开发

这里主要介绍一下spring+struts+ibatis所需要的jar包文件spring所需包  以上包为spring配置基本包ibatis所需包  有解决方法的朋友们希望能回复  与struts整合

知识大全 开源技术—struts2中i18n的设置

针对xxxclass建立xxxproperties文件可以对class中的Output设置本地化输出更常用的方法是正对package建立packageNameproperties在其中设置Action

知识大全 在Struts 2中实现文件上传

在Struts2中实现文件上传  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Struts是通过

知识大全 学习比较Struts2和Struts1:Struts2完胜

学习比较Struts2和Struts1:Struts2完胜  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 Struts2简介

Struts2简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一什么是Struts?  虽然