Struts2下载

因为下载文件就是一个按钮或者一个链接,所以以下就不列出页面代码,只列出struts.xml配置和Action类
1.一个简单的文件下载
struts.xml:
<action name="downloadAction" class="com.edifier.action.FileDownloadAction"> 

	<result name="success" type="stream"> 
	
		<!--内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,
			image/gif代表GIF图片,image/jpeg代表JPG图片-->
		<param name="contentType">text/plain</param> 
		
		<!-- 下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,
			例如取值为inputStream 的属性需要编写getInputStream()方法 -->
		<param name="inputName">inputStream</param> 
		
		<!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则
			浏览器会尝试直接显示文件 attachment;filename="struts2.txt" ,表示文件下载的时候保存的名字应为struts2.txt。
			如果直接写filename="struts2.txt" ,那么默认情况是代表inline ,浏览器会尝试自动打开它。-->
		<param name="contentDisposition">attachment;filename="struts2.txt"</param> 
		
		<!-- 下载缓冲区的大小 -->
		<param name="bufferSize">4096</param> 

	</result> 

</action> 

Action类:
package com.edifier.action; 

import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import com.opensymphony.xwork2.Action; 

public class FileDownloadAction implements Action { 

	public InputStream getInputStream() throws Exception { 
		//"Struts 2 下载示例"就是下载的文件的内容。
		return new ByteArrayInputStream("Struts 2 下载示例".getBytes()); 
	} 

	public String execute() throws Exception { 
		return SUCCESS; 
	} 
	
} 

2.文件下载,支持中文附件名
struts.xml:
<action name="downloadAction2" class="com.edifier.action.FileDownloadAction2"> 

	<!-- 初始文件名,这个名字会传到Action中,之后被转码再下载 --> 
	<param name="fileName">Struts中文附件.txt</param> 

	<result name="success" type="stream"> 

		<param name="contentType">text/plain</param> 

		<param name="inputName">inputStream</param> 

		<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性 
			对应action类中的方法 getDownloadFileName() --> 
		<param name="contentDisposition">attachment;filename="${downloadFileName}"</param> 

		<param name="bufferSize">4096</param> 

	</result> 

</action> 

Action类:
package com.edifier.action;

import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import java.io.UnsupportedEncodingException; 
import com.opensymphony.xwork2.Action; 

public class FileDownloadAction2 implements Action { 

	private String fileName;// 依赖注入获取

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

	/** 提供转换编码后的供下载用的文件名 */ 
	public String getDownloadFileName() { 
		String downFileName = fileName; 

		try { 
			downFileName = new String(downFileName.getBytes(), "ISO8859-1"); 
		} catch (UnsupportedEncodingException e) { 
			e.printStackTrace(); 
		} 
		return downFileName; 
	} 

	public InputStream getInputStream() throws Exception { 
		//这里可以提供一个文件输入流就可以下载文件了。
		return new ByteArrayInputStream("Struts 2 下载示例".getBytes()); 
	} 

	public String execute() throws Exception { 
		return SUCCESS; 
	} 
} 

3.下载真是文件
struts.xml
<action name="downloadAction3" class="com.edifier.action.FileDownloadAction3"> 
	<!-- 供下载的文件相对路径 --> 
	<param name="inputPath">/download/Java面试宝典2012版130.doc</param> 

	<!-- 初始文件名 --> 
	<param name="fileName">Java面试宝典2012版130.doc</param> 

	<result name="success" type="stream"> 
	
		<!-- contentType 的取值,如果是未知的文件类型,或者说出现了浏览器不能打开的文件,例如.bean 文件,或者说
			这个action是用来做动态文件下载的,事先并不知道未来的文件类型是什么,那么我们可以把它的值设置成为:
			application/octet-stream;charset=ISO8859-1 ,注意一定要加入charset ,否则某些时候会导致下载的文件出错。
		 -->
		<param name="contentType">application/octet-stream;charset=ISO8859-1</param> 

		<param name="inputName">inputStream</param> 

		<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性 
			对应action类中的方法 getDownloadFileName() --> 
		<param name="contentDisposition">attachment;filename="${downloadFileName}"</param> 

		<param name="bufferSize">4096</param> 

	</result> 

</action>

Action类:
package com.edifier.action;

import java.io.InputStream; 
import java.io.UnsupportedEncodingException; 
import org.apache.struts2.ServletActionContext; 
import com.opensymphony.xwork2.Action; 

public class FileDownloadAction3 implements Action { 

	private String fileName;// 依赖注入获取
	private String inputPath;// 依赖注入获取,下载的文件相对路径

	public void setInputPath(String value) { 
		inputPath = value; 
	} 

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

	/** 提供转换编码后的供下载用的文件名 */ 
	public String getDownloadFileName() { 

		String downFileName = fileName; 

		try { 
			downFileName = new String(downFileName.getBytes(), "ISO8859-1"); 
		} catch (UnsupportedEncodingException e) { 
			e.printStackTrace(); 
		} 
		return downFileName; 
	} 
	
	public InputStream getInputStream() throws Exception { 
		// 通过 ServletContext,也就是application 来读取数据 
		return ServletActionContext.getServletContext().getResourceAsStream(inputPath); 
	} 

	public String execute() throws Exception { 
		return SUCCESS; 
	} 
} 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值