Struts2中的文件下载

以下是我的配置:

struts.xml

<action name="downloadExcel" class="com.project.action.DownloadAction">
		 	<result name="success" type="stream">
				<param name="contentType">application/vnd.ms-excel</param>
				<param name="contentDisposition">attachment;filename="${downloadChineseFileName}"</param>
				<param name="inputName">downloadFile</param>		 	
		 	</result>
		</action>
action:

private final static String DOWNLOADFILEPATH = SystemConfigUtil.getExportPath();
	private String fileName;
	
	 public String getFileName() {
		return fileName;
	}

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

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

	public InputStream getDownloadFile() throws Exception {
		return new FileInputStream(DOWNLOADFILEPATH+fileName);
		//return ServletActionContext.getServletContext().getResourceAsStream("/upload/admin_1351747906109_detail_SalesReport.xls");
	}//getDownloadFile()方法返回的必须是InputStream。getResourceAsStream()方法可以通过流的方式将资源输出
	
	  // 解决下载中文文件名的问题
	public String getDownloadChineseFileName()
			throws UnsupportedEncodingException {
		return new String(fileName.getBytes(), "ISO8859-1");
	}  

type默认为 dispatcher。在处理文件下载的操作时,必须将type显式设置为 stream类型
stream主要向浏览器发送 InputStream对象,通常用来处理下载文件,还可用于 返回AJAX数据
接下来就需要设置 StreamResult类的三个重要的属性,如下所示
contentType属性用来指定下载文件的类型,同样可以在 Tomcat6.0.20//conf//web.xml文件中查看 MIME Type Mappings
contentDisposition属性用来设定显示的文件名,这是在点击下载链接时显示在提示框中的文件名
                                    同时它的值的 filename=" "所设定的 name值也是下载到本地之后的文件的名字
                                    并且它的写法是 固定的filename=" ",这是由HTTP协议所规范的
inputName属性的值需严格遵守 JavaBean规范,它对应着Action中 返回inputStream的方法名
                       假设inputName设为 downFile,则Action中必定有一个 返回inputStream的getDownFile()方法
另外 contentDisposition属性可以设定两个值,它的第一个值用来设定 文件打开方式,默认的是 inline即在浏览器中打开
也可设定 attachment,如 <param name="contentDisposition">attachment;filename="Struts2.ppt"</param>
即无论是什么类型的文件,哪怕是TXT,它也会弹出一个下载框,供用户选择打开或下载



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值