在struts2中,通过结果类型stream来支持文件下载功能.当指定stream结果类型时,需要设置一个inputName作为输入流,这个输入流是被下载文件的入口.
(1)编写实现文件下载的类DownloadAction
public class DownloadAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String inputPath;
public String getInputPath() {
return inputPath;
}
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
public InputStream getTargetFile(){
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
}
在上述Action中,getTargetFile()方法返回一个InputStream输入流,次输入流返回的是下载目标文件的入口.该方法名是getTargetFile,则stream类型的结果映射中inputName的参数值为targetFile
(2)配置struts.xml文件
contentType:指定下载文件的文件类型
inputName:指定下载文件的入口输入流
contentDisposition:指定下载文件的文件名
bufferSize:指定文件的缓冲大小
<action name="download" class="action.DownloadAction">
<param name="inputPath">\upload\report.rar</param>
<result name="success" type="stream">
<param name="contentType">application/rar</param>
<param name="inputName">targetFile</param>
<param name="contentDisopsition">filename="report.rar"</param>
<param name="bufferSize">4096</param>
</result>
</action>