Struts2之文件下载

时间:2022-10-21 14:51:15

Struts2的文件下载Action与普通的Action并没有太大的不同,仅仅是该Action需要提供一个返回InputStream流的方法,该输入流代表了被下载文件的入口。FileDownloadAction.java如下

public class FileDownloadAction
	extends ActionSupport
{
	// 该成员变量可以在配置文件中动态指定该值
	private String inputPath;
	// inputPath的setter方法
	public void setInputPath(String value)
	{
		inputPath = value;
	}
	/*
	定义一个返回InputStream的方法,
	该方法将作为被下载文件的入口,
	且需要配置stream类型结果时指定inputName参数,
	inputName参数的值就是方法去掉get前缀、首字母小写的字符串
	*/
	public InputStream getTargetFile() throws Exception
	{
		// ServletContext提供getResourceAsStream()方法
		// 返回指定文件对应的输入流
		return ServletActionContext.getServletContext()
			.getResourceAsStream(inputPath);
	}
}

配置下载的Action与普通的Action并没有太大的不同,关键是需要配置一个类型为stream的结果,该stream类型的结果将使用文件下载作为响应。配置stream类型的结果需要指定如下属性:

1)        contentType:指定被下载文件的文件类型。

2)        inputName:指定被下载文件的入口输入流。

3)        contentDisposition:指定下载的文件名。

4)        bufferSize:指定下载文件时的缓存大小。

<action name="download" class="com.owen.app.action.FileDownloadAction">
		<!-- 指定被下载资源的位置 -->
			<param name="inputPath">/WEB-INF/images/owen.jpg</param>
			<!-- 配置结果类型为stream的结果 -->
			<result type="stream">
				<!-- 指定下载文件的文件类型 -->
				<param name="contentType">image/jpg</param>
				<!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->
				<param name="inputName">targetFile</param>
				<param name="contentDisposition">filename="owen_logo.jpg"</param>
				<!-- 指定下载文件的缓冲大小 -->
				<param name="bufferSize">4096</param>
			</result>
		</action>
<action name="download2" class="com.owen.app.action.AuthorityDownAction">
			<!-- 定义被下载文件的物理资源 -->
			<param name="inputPath">/WEB-INF/images/wjc_logo.zip</param>
			<result type="stream">
				<!-- 指定下载文件的文件类型 -->
				<param name="contentType">application/zip</param>
				<!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->
				<param name="inputName">targetFile</param>
				<param name="contentDisposition">filename="owen_logo.zip"</param>
				<!-- 指定下载文件的缓冲大小 -->
				<param name="bufferSize">4096</param>
			</result>
			<!-- 定义一个名为login的结果 -->
			 <result name="login">/WEB-INF/content/loginForm.jsp</result>
		</action>

     JSP页面的实现:

<body>
	<h1>Struts 2的文件下载</h1>
	<ul>
	<li>
	下载owen:
		<a href="download.action">下载图形文件</a> 
	</li>
	<li>
	下载owen的压缩文件:
		<a href="download2.action">下载压缩文件</a>
	</li>
	</ul>
</body>

页面视图:

Struts2之文件下载