Struts2实现文件下载

自己写Demo的时候总会遇到各种各样的问题,在博客记下我的心得,也希望遇到和我一样问题的同学可以少走弯路。

 

以下是struts2实现文件下载的方法:

1.创建Action类,包含返回InputStream的方法,该方法主要是将下载文件以字节流返回。

2.struts.xml中设置result类型是stream,其他需要设置的属性: contentType、inputName、contentDisposition、bufferSize

 

以下是FileDownloadAction:

 

public class FileDownAction extends ActionSupport {
	//依赖注入属性,注入struts.xml文件inputPath。
	private String inputPath;
	
	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}
	
	//返回字节流,在struts.xml中设置的inputName属性的值是该方法名字除去get(targetFile)
	public InputStream getTargetFile()throws Exception{
		
		return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
	}
	
	public String execute()throws Exception{
		
		return SUCCESS;
	}
}

 

以下是strutsx.xml,的action

 

<action name="fileDownAction" class="com.down.action.FileDownAction">
			<!-- 设定文件路径 -->
			<param name="inputPath">/down/01.jpg</param>
			<result name="success" type="stream">
				<!--设定文件头。书上说是image/jpg,执行后图片直接打开,没有下载  -->
				<param name="contentType">application/octet-stream</param>
				<!-- 去掉get的字节流方法名 -->
				<param name="inputName">targetFile</param>
				<!-- 下载默认文件名 -->
				<param name="contentDisposition">filename="nami.jpg"</param>
				<!-- 设定下载文件的缓冲大小 -->
				<param name="bufferSize">4096</param>
			</result>
		</action>

 

 

*******************************************

 

以下说一下我在写DEMO过程中遇到的问题:

1.以上代码写好,部署到tomcat后,执行出现java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [targetFile] in the invocation stack 异常。

 

解决方法:

因为inputStream方法返回的是null值,我的tomcat没有将down文件(就是存放下载源的文件)部署上去,修改Myeclipse设置:工程文件右键 properties-->Myeclipse-->Deployment Assembly,Add一个down文件(我的文件在工程文件根目录下),然后设置Delpoy Path(/down),重新部署,问题解决。实在不行,可以直接复制上去。

 

2.打开网页后发现图片直接打开,没有弹出下载页面。前提:image/jpeg已经测试过

 

凑合的解决方法:

因为struts.xml中contentType(就是文件头)设置不对。将它设置成application/octet-stream,在chrome和firefox中可以下载,ie中还是不行。估计是IE分析文件方式独特或者不提供图片下载(图片另存为),看到一个同学用依赖注入来设定contentType,地址是:http://xiaolongfeixiang.iteye.com/blog/662479

 

*补充:测试过txt、jpg、rar、exe等四种格式在ie9中下载。ie9自动打开txt和jpg,rar和exe则可以下载。

firefox和chrome则以上四个都可以下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值