1). Struts2 中使用 type="stream" 的 result 进行下载即可
<action name="testDownload" class="com.download.file.DownloadAction">
<result name="success" type="stream"></result>
</action>
2). 具体使用细节参看 struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/stream-result.html
3). 可以为 stream 的 result 设定如下参数
contentType: 结果类型
contentLength: 下载的文件的长度
contentDisposition: 设定 Content-Dispositoin 响应头. 该响应头指定接应是一个文件下载类型, 一般取值为 attachment;filename="document.pdf".
inputName: 指定文件输入流的 getter 定义的那个属性的名字. 默认为 inputStream
bufferSize: 缓存的大小. 默认为 1024
allowCaching: 是否允许使用缓存
contentCharSet: 指定下载的字符集
4). 以上参数可以在 Action 中以 getter 方法的方式提供!
package com.download.file; import java.io.FileInputStream; import java.io.InputStream; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport { private static final long serialVersionUID = 1L; private String contentType; //结果类型 private long contentLength; //下载的文件的长度 private String contentDisposition; //设定 Content-Dispositoin 响应头. 该响应头指定接应是一个文件下载类型, 一般取值为 attachment;filename="document.pdf". private InputStream inputStream; //指定文件输入流的 getter 定义的那个属性的名字. 默认为 inputStream public String getContentType() { return contentType; } public long getContentLength() { return contentLength; } public String getContentDisposition() { return contentDisposition; } public InputStream getInputStream() { return inputStream; } @Override public String execute() throws Exception { contentType="text/txt"; contentDisposition = "attachment;filename=测试下载.txt"; ServletContext servletContext = ServletActionContext.getServletContext(); String fileName = servletContext.getRealPath("/files/测试下载.txt"); inputStream = new FileInputStream(fileName); contentLength = inputStream.available(); return super.execute(); } }