配置stream类型的结果需要指定如下属性:
因为stream结果类型的逻辑视图是返回给客户端一个输入流,因此无需指定location属性。只需指定inputName属性即可,该属性执行被下载文件。
第一步:struts.xml配置:
<?xml version="1.0"encoding="utf-8"?><!DOCTYPE strutsPUBLIC"-//Apache Software Foundation//DTDStruts Configuration 2.0//EN""http://struts.apache.org/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"> <!-- 连接进入上传页面--> <actionname="uploadFile"> <result>/WEB-INF/jsp/upload.jsp</result> </action> <!--下载文件的Action --> <actionname="down"> <!-- 指定被下载资源的位置 --> <paramname="inputPath">imagesc1.gif</param> <!-- 配置结果类型为stream的结果--> <result name="success"type="stream"> <!-- 指定下载文件的类型--> <paramname="contentType">image/gif</param> <!-- 指定下载文件的位置--> <paramname="inputName">targetFile</param> <paramname="contentDisposition">attachement;filename="struts.gif"</param> <!--指定下载文件的缓冲大小 --> <paramname="bufferSize">50000000</param> </result> </action>
</package></struts>//struts.xml配置中红色部分是可以更改部分。其他部分不能更改
第二步:实现下载的Action代码:
package org.struts;
import java.io.InputStream;
importorg.apache.struts2.ServletActionContext;
importcom.opensymphony.xwork2.Action;
public class AuthorityDownActionimplements Action{
//该属性石依赖注入的属性,可以在配置文件中动态指定该属性private String inputPath;
public void setInputPath(StringinputPath) {this.inputPath = inputPath;}
//@Author Bob//下载用的Action应该返回一个InputStream实例//该方法对应在result里的inputName属性值为targetFile
public InputStream getTargetFile()throws Exception{
InputStreamin=ServletActionContext.getServletContext().getResourceAsStream(inputPath);return in;}@Overridepublic String execute() throws Exception{return SUCCESS;}
![struts2实现文件下载 无法上传docx类型文件](http://img.aihuau.com/images/01111101/01092848t012423e8effb603a4c.jpg)
}
第三步:下载页面代码:
下载:<ahref="down.action">图片下载</a>