11.3 Struts 2控制文件下载
文件下载相对于文件上传要简单得多,最简单的方式就是直接在页面上给出一个下载文件的链接,使用Struts 2框架来控制文件的下载,关键是需要配置一个stream类型的结果,需要指定下面4个属性。
contentType属性:指定被下载文件的文件类型。
inputName属性:指定被下载文件的入口输入流。
contentDisposition属性:指定下文件的文件名称。
bufferSize属性:指定下载文件时的缓冲区大小。
配置上面4个属性,既可以在配置文件中配置,也可以在Action中设置该属性来完成配置。
11.3.1 在配置文件中指定下载资源
下面给出在配置文件中指定下载资源的示例,如代码11.9所示。
代码11.9 文件下载业务控制器
package
ch11;
import
java.io.InputStream;
import
org.apache.struts2.ServletActionContext;
import
com.opensymphony.xwork2.Action;
public
class
FileDownloadAction
implements
Action
{
private String inputPath;
public void setInputPath(String value) {
inputPath = value;
}
//返回一个InputStream类型值
public InputStream getInputStream() throws Exception {
return ServletActionContext.getServletContext().getResourceAsStream (inputPath);
}
public String execute() throws Exception {
return SUCCESS;
}
}

该Action非常简单,并没有其他特殊之处,关键在于配置文件中关于该Action的配置,其内容如下所示:
<!--
配置文件定义文件下载
-->

<
action
name
="download"
class
="ch11.FileDownloadAction"
>

<!--
指定下载资源位置
-->

<
param
name
="inputPath"
>
/upload/struts-power.gif
</
param
>

<!--
指定success逻辑视图为一个stream类型,即流视图
-->

<
result
name
="success"
type
="stream"
>

<!--
下载文件的类型
-->

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

<!--
下载文件位置
-->

<
param
name
="inputName"
>
inputStream
</
param
>

<
param
name
="contentDisposition"
>

filename="struts.gif"
</
param
>

<!--
缓冲区大小
-->

<
param
name
="bufferSize"
>
4096
</
param
>

</
result
>

</
action
>

读者可以看到,该Action指定了一个success返回逻辑视图,该视图类型为stream,即一个流类型,即需要下载的资源流。本示例中,在该success逻辑视图中增加了4个参数,参数contentType指定了下载资源的类型;inputName参数和contentDisposition参数指定了下载资源的位置;bufferSize参数指定了下载资源的缓冲区大小。
在Action配置中,初始化了一个inputPath参数,即指定了下载资源的Web相对位置。读者可以运行该示例,在浏览器中输入http://localhost:8080/bookcode/ch11/download.action,结果如图11.11所示。

图11.11 Struts 2控制文件下载界面
本文介绍如何使用 Struts2 框架控制文件下载,包括配置文件中指定下载资源的方法,以及关键属性的使用。

被折叠的 条评论
为什么被折叠?



