配置stream类型的结果需要指定如下属性:
- contentType :指定被下载文件的文件类型
- inputName :指定被下载文件的入口输入流
- contentDisposition : 指定被下载文件名
- bufferSize :指定下载文件时的缓冲大小
因为stream结果类型的逻辑视图是返回给客户端一个输入流,因此无需指定location属性。只需指定inputName属性即可,该属性执行被下载文件。
第一步:struts.xml配置:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts./dtds/struts-2.0.dtd">
<struts>
<!-- 指定国际化资源文件的baseName为uploadFile-->
<constant name="struts.custom.i18n.resources" value="uploadFile"></constant>
<!-- 设置该应用使用的编码集为utf-8 -->
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="default" namespace="/" extends="struts-default" >
<!-- 连接进入上传页面 -->
<action name="uploadFile">
<result>/WEB-INF/jsp/upload.jsp</result>
</action>
<!-- 下载文件的Action -->
<action name="down" class="org.struts.AuthorityDownAction">
<!-- 指定被下载资源的位置 -->
<param name="inputPath">\images\c1.gif</param>
<!-- 配置结果类型为stream的结果 -->
<result name="success" type="stream">
<!-- 指定下载文件的类型 -->
<param name="contentType">image/gif</param>
<!-- 指定下载文件的位置 -->
<param name="inputName">targetFile</param>
<param name="contentDisposition">attachement;filename="struts.gif"</param>
<!-- 指定下载文件的缓冲大小 -->
<param name="bufferSize">50000000</param>
</result>
</action>
</package>
</struts>
//struts.xml配置中红色部分是可以更改部分。其他部分不能更改
第二步:实现下载的Action代码:
package org.struts;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
public class AuthorityDownAction implements Action{
//该属性石依赖注入的属性,可以在配置文件中动态指定该属性
private String inputPath;
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
// @Author Bob
//下载用的Action应该返回一个InputStream实例
//该方法对应在result里的inputName属性值为targetFile
public InputStream getTargetFile() throws Exception{
InputStream in=ServletActionContext.getServletContext().getResourceAsStream(inputPath);
return in;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
第三步:下载页面代码:
下载:<a href="down.action">图片下载</a>
|