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>

本文介绍了一种使用Struts2框架实现文件下载的方法,通过定制化的Action返回文件的输入流,并利用Struts2的stream结果类型来处理文件下载过程。这种方式能够有效解决文件名包含非英文字符时的下载问题。
152

被折叠的 条评论
为什么被折叠?



