Struts2 文件下载

通常我在开发资源下载的过程,如果你尝试只面在页面上那建立一个连接,当单击的时间可能也会出现的资源下载的提示,但是这样实现对不同的浏览器不能总是起作用,可能浏览把这个文件打开了,或者其它的情况,而且这样作法也不利于资源下载权限的控制.通用的作用是为服务器端为资源提供一下写入流,浏览器可以以流的方式下载资源,同时也可以在服务器端控制权限。

下面看一,strust2 的资源下载:使用一个简单的例子说明资源下载的作法。 1. 创建一个web工程,正常配置strust.xml 文件 2. 在WebRoot 目录下创建一个download.jsp 文件,里面就是一个简单的连接,连接到一个action,代码如下:

 


download 1.3创建一个DownloadAction ,负责文件下载,代码如下: package com.snt.struts2.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport { public InputStream getDownloadFile(){ return ServletActionContext.getServletContext().getResourceAsStream("/upload/commons-io-1.4-bin.zip"); } @Override public String execute() throws Exception { return SUCCESS; } } 我们发现Action中多一个方法getDownloadFile,这个方法返回一个输入流。从而我们可以想到这个流要提供给浏览器使用。 1.4在strsut.xml 中配置Action,如下:

 

 

application/zip filename="commons-io-1.4-bin.zip" downloadFile 高亮显示的配置是至关重要的,我们发现在action配置多了人属性type,这个属性指的是Result结果的,通常我们用的(即默认的是)dispatcher ,这个类型是由Strust2 中的Result 决定的。我们看一上strsuts-default.xml 文件中关于Result的配置,如下:

Strsut2 的Result 支持以下定义的类型。我们可以看到上面一个叫stream 的类型,这个就是文件下载使用的类型(流类型),对应的类 org.apache.struts2.dispatcher.StreamResult。我们看一下,StreamResult 类的属性: *

  
 * <result name="success" type="stream">
 *   <param name="contentType">image/jpeg</param>
 *   <param name="inputName">imageStream</param>
 *   <param name="contentDisposition">filename="document.pdf"</param>
 *   <param name="bufferSize">1024</param>
 * </result>
 * 
  

* */ public class StreamResult extends StrutsResultSupport { private static final long serialVersionUID = -1468409635999059850L; protected static final Log log = LogFactory.getLog(StreamResult.class); public static final String DEFAULT_PARAM = "inputName"; protected String contentType = "text/plain"; protected String contentLength; protected String contentDisposition = "inline"; protected String inputName = "inputStream"; protected InputStream inputStream; protected int bufferSize = 1024; 上面几个发展是Http协议下载资源所要求的信息,所以在返回这样结果类型的请求中也要包涵这些信息。上面的属性对应上面Action中Result 的配置: application/zip filename="commons-io-1.4-bin.zip" downloadFile inputName 对应要获取的输入流,通过Action 中的方法。contentType 下载资源的类型。这此类型可以在Tomcat 安装目录下的conf 下web.xml 文件中找到。部署应用程序测试,正常下载为止。我们上面只是演示了一下,单个资源下载的情况,如果是多个我们只需需要在Action做简单修改即可,来动态下载或增加权限控制。

你可能感兴趣的:(struts,Stream,String,浏览器,action,import)