文件下载Action
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadFileAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private static String ROOTDIR = ServletActionContext.getServletContext()
.getRealPath("/userfiles/");// 项目的根目录下的userfiles文件下,大家可以自己定义
private String downFileName;
private InputStream fileInputStream;
public InputStream getFileInputStream() {// 下载文件的输出流
return fileInputStream;
}
public String execute() throws Exception {
fileInputStream = new FileInputStream(new File(ROOTDIR, downFileName));
return SUCCESS;
}
public String getDownFileName() {
return downFileName;
}
public void setDownFileName(String downFileName) {
this.downFileName = downFileName;
}
}
struts.xml
<include file="struts-default.xml" /> <!-- Struts2常量配置 struts.devMode:开发模式,修改配置信息可以不必重新部署服务器 struts.i18n.encoding:国际化编码 struts.ognl.allowStaticMethodAccess:允许ognl访问静态方法 struts.ogjectFactory:将当前Struts2的Action交给Spring管理 --> <constant name="struts.devMode" value="true" /> <constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> <constant name="struts.objectFactory" value="spring" /> <constant name="struts.custom.i18n.resources" value="globalMessages" /> <constant name="struts.action.extension" value="do,action" /> <!--定义全局变量--> <package name="global" namespace="/" extends="struts-default"> <global-results> <result name="login">/login.jsp</result> <result name="error">/WEB-INF/error.jsp</result> </global-results> <!-- 全局返回结果在上,全局异常定义在下,不要弄反了。 --> <global-exception-mappings> <exception-mapping result="error" exception="Exception"></exception-mapping> </global-exception-mappings> </package> <package name="ajax" namespace="/ajax" extends="global"> <!-- 下载文件的Action定义,我是用的是SSH,所以downloadBean是取自Spring中 --> <action name="download" class="downloadBean"> <!-- 设置文件名参数,由页面上传入 --> <param name="downFileName"></param> <result name="success" type="stream"> <!-- 下载文件类型定义 --> <param name="contentType">application/octet-stream</param> <!-- 下载文件处理方法 --> <param name="contentDisposition"> attachment;filename="${downFileName}" </param> <!-- 下载文件输出流定义 getFileInputStream()--> <param name="inputName">fileInputStream</param> </result> </action> </package>
访问 ajax/download.do?downFileName=已有的文件名
注意jar包要使用最新的。
参考资料
http://johnson2132.iteye.com/blog/720761
http://www.mkyong.com/struts2/struts-2-download-file-example/