Struts2文件下载
首先配好struts:
web.xml
-
<?xml version="1.0" encoding="UTF-8"?>
-
<web-app version="2.4"
-
xmlns="http://java.sun.com/xml/ns/j2ee"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
<welcome-file-list>
-
<welcome-file>index.jsp</welcome-file>
-
</welcome-file-list>
-
-
<filter>
-
<filter-name>struts2</filter-name>
-
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-
</filter>
-
<filter-mapping>
-
<filter-name>struts2</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
-
</web-app>
struts.xml——这里是重点
-
<!DOCTYPE struts PUBLIC
-
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-
"http://struts.apache.org/dtds/struts-2.0.dtd">
-
<struts>
-
<package name="default" extends="struts-default">
-
<action name="download" class="action.DownloadAction">
-
<result type="stream">
-
<param name="contentType">application/octet-stream</param>
-
<param name="inputName">inputStream</param>
-
<param name="contentDisposition">attachment;filename="${fileName}"</param>
-
<param name="bufferSize">4096</param>
-
</result>
-
</action>
-
</package>
-
</struts>
当result为stream类型时,struts2会自动根据你配置好的参数下载文件。
其中主要使用的参数是:
contentType 指定下载文件的文件类型 —— application/octet-stream 表示无限制
inputName 流对象名 —— 比如这里写inputStream,它就会自动去找Action中的getInputStream方法。
contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。
bufferSize 下载文件的缓冲大小
之后写个DownloadAction:
-
package action;
-
-
import java.io.InputStream;
-
-
import org.apache.struts2.ServletActionContext;
-
-
public class DownloadAction {
-
-
private String fileName;
-
-
this.fileName = fileName;
-
}
-
return ServletActionContext.getServletContext().getResourceAsStream("/" + fileName);
-
}
-
-
return "success";
-
}
-
-
}
* 注意使用getResourceAsStream方法时,文件路径必须是以“/”开头,且是相对路径。这个路径是相对于项目根目录的。
* 可以用return new FileInputStream(fileName)的方法来得到绝对路径的文件。
在项目目录(WebRoot)随意丢一个test.txt,部署好后进入浏览器,输入tomcat地址/项目路径/download.action?fileName=test.txt即可下载到该文件。