Struts2 文件下载
传统的文件下载方式,可以直接给出一个超链接,直接指向系统的内部资源,这种方法大部分情况下是可行的,但是如果资源名称含有非英文字符,可能会导致一些早期的浏览器下载失败,而struts2对文件下载进行了封装,可以避免这一情况;
Struts2 下载文件使用 Action 进行处理的,该Action区别于一般的Action,是提供了返回 InputStream流的方法,以下是一个简单的文件下载示例:
down.jsp :下载请求的视图页面
假设要下载的文件为于“web/downloadFile/test.jpg”;
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>File download</title></head>
<body>
<s:url action="download" var="downloadURL">
<s:param name="filePath">/downloadFile/test.jpg</s:param>
</s:url>
<a href="<s:property value='#downloadURL'/>">download test.jpg</a>
</body>
</html>
DownloadAction : 处理文件下载的Action
public class DownLoadAction extends ActionSupport {
private String filePath; //待下载的文件路径
//省略 get,set 方法;
public InputStream getTargetFile() throws Exception{
//获取待下载资源的Stream形式,可以在此进行进行用户验证等行为
return ServletActionContext.getServletContext().getResourceAsStream(filePath);
}
}
struts.xml
<struts>
<package name="download" extends="struts-default">
<action name="download" class="download.DownLoadAction">
<result type="stream">
<!--指定由 getTargetFile() 方法返回的下载文件的InputStream -->
<param name="inputName">targetFile</param>
<!--指定下载后文件名的命名-->
<param name="contentDisposition">attachment;filename="${filePath}"</param>
<!--指定下载文件格式限制(可选)-->
<param name="contentType">image/jpg</param>
<!--指定缓冲区大小,单位字节(可选)-->
<param name="bufferSize">4096</param>
</result>
</action>
</package>
</struts>