文件下载非常简单,直接在页面上给出一个超链接,链到指定的Servlet就可以了。用Struts2框架实现也是非常简单,下面就来实现一下:
Action类:
public class FileDownloadAction extends ActionSupport{
//封装被下载资源位置信息
private String inputPath;
public String getInputPath() {
return inputPath;
}
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
/**
* 定义一个返回InputStream的方法,该方法作为被下载文件的入口,
* 且需要配置stream类型结果时指定inputName参数,
* inputName参数的值就是方法去掉get前缀、首字母小写的字符串
* @return
* @throws Exception
*/
public InputStream getTargetFile() throws Exception{
//返回指定文件对应的输入流
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
}
配置Action:
配置文件下载Action与配置普通Action没有太大的不同,关键是需要配置一个类型为stream的结果,该stream类型结果将使用文件下载作为响应。
struts.xml
<action name="download" class="cn.edu.neuq.action.FileDownloadAction">
<!-- 指定被下载资源的位置 -->
<param name="inputPath">/WEB-INF/images/haha.jpg</param>
<!-- 配置结果类型为stream的结果 -->
<result type="stream">
<!-- 指定下载文件的文件类型 -->
<param name="contentType">image/jpg</param>
<!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->
<param name="inputName">targetFile</param>
<param name="contentDisposition">filename="heihei.jpg"</param>
<!-- 指定下载文件的缓冲大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
完成!