Struts2文件下载

Struts2通过org.apache.struts2.dispatcher.StreamResult结果类型来支持文件下载,重要属性:

contentType:用来指定下载文件的类型,application/octet-stream表示无限制。

inputName:流对象名,严格遵守JavaBean规范,它对应着Action中返回InputStream类型的方法名,假如inputName的值为downFile,则Action中必定有一个public InputStream getDownFile()方法。

contentDisposition:可以设定两个值,它的第一个值来设定文件打开方式,默认是inline即在浏览器中打开,也可以设定attachment(附件的形式),第二个值格式为filename="${fileName}",第二个值也严格遵守JavaBean规范,假设符号内的值为fileName,则Action中必定有一个public String getFileName()方法。

bufferSize:下载文件的缓冲区大小。

DownTestAction.java:

public class DownTestAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	/*要下载的文件名*/
	private String fileName = null;
	/*文件保存的路径(在struts.xml文件中注入)*/
	private String path;

	public String getPath() {
		return path;
	}

	public void setPath(String path){

		this.path = path;
	}

	public String getFileName() {

		try {
			 //在服务器端通过设置http Header, 设置了客户端的默认的字符集编码 
			ServletActionContext.getResponse().setHeader("charset", "ISO8859-1");
			return new String(this.fileName.getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException e) {
			return "获取文件名出现错误!";
		}
	}

	public void setFileName(String fileName){
		
		this.fileName = fileName; 
	}

	/**
	 * 下载方法
	 * @return
	 * @throws FileNotFoundException
	 */
	public InputStream getInputStream() throws FileNotFoundException {
		/* 创建文件 */
		File file = new File(this.path + this.fileName);
		/* 创建文件输入流 */
		InputStream stream = new FileInputStream(file);

		return stream;
	}

}

struts.xml:

<action name="downTestAction" class="com.lixue.web.action.DownTestAction">
			<!-- 通过注入的方式指定文件的路径 -->
			<param name="path">D:/</param>
			<!--type 为 stream 应用 StreamResult 处理 -->
			<result name="success" type="stream">
				<!--默认为 text/plain -->
				<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
				<!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法, 比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->
				<param name="inputName">inputStream</param>
				<!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename 指定下载文件时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名 -->
				<param name="contentDisposition">attachment;filename="${fileName}"</param>
				<!-- 输出时缓冲区的大小 -->
				<param name="bufferSize">4096</param>
			</result>
		</action>

下载页download.jsp:

 <body>
     <a href="downTestAction.action?fileName=web.txt">下载</a>
  </body>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值