利用struts2进行文件下载

文件下载可以通过超链接的 href 属性指定,但这种方式会使浏览器默认打开,如果利用struts2的话,可以控制浏览器的行为,使其打开文件下载对话框,让用户选择打开还是保存。

①首先是文件上传(可参看 利用struts2文件上传组件进行文件上传 ),上传好了之后,跳转到downloadfile.jsp页面,如下:

文件上传成功:<br/>
<p>struts2标签:</p>
 原文件名: <s:property value="upLoadFile.originalName"/><br/>
 保存到服务器端的位置:  <s:property value="upLoadFile.serverDiskPathName"/><br/>
 HTML访问的路径:  <s:property value="upLoadFile.imgSrc"/><br/>
 文件大小:  <s:property value="upLoadFile.size"/><br/>
 保存时间:  <s:property value="upLoadFile.date"/><br/>
<p>EL表达式:</p>
 原文件名: ${upLoadFile.originalName}<br/>
 保存到服务器端的位置: ${upLoadFile.serverDiskPathName}<br/>
 HTML访问的路径:  ${upLoadFile.imgSrc}<br/>
 文件大小:  ${upLoadFile.size}<br/>
 保存时间: <fmt:formatDate  value="${upLoadFile.date}" type="both" pattern="yyyy-MM-dd HH:mm:ss" /><br/>
ContentType:${fileContentType}<br/>

<a href="${upLoadFile.imgSrc}">下载1</a><br/>
<a href="/downloadFile?upLoadFile.imgSrc=${upLoadFile.imgSrc}&upLoadFile.originalName=${upLoadFile.originalName}">下载2</a><br/>
<a href="javascript:document.getElementById('form1').submit();">下载3</a><br/>
<s:form action="downloadFile" method="post" id="form1">
	<s:hidden name="upLoadFile.originalName"></s:hidden>
	<s:hidden name="upLoadFile.imgSrc"></s:hidden>
</s:form>

②文件下载处理action:downloadFile

	/**
	 * 文件下载
	 * @return
	 * @throws Exception
	 */
	public String download() throws Exception {
		
		return ActionSupport.SUCCESS;
	}
	/**
	 * 文件下载,方法名和struts.xml中inputName指定的对应
	 * @return
	 */
	public InputStream getDownloadFile(){
		String src=upLoadFile.getImgSrc();
		try {
			//防止弹出的文件下载对话框出现乱码
			String name_8859_1=new String(upLoadFile.getOriginalName().getBytes("gbk"),"8859_1");
			upLoadFile.setOriginalName(name_8859_1);
		} catch (Exception e) {
			e.printStackTrace();
		}
		InputStream inputStream=ServletActionContext.getServletContext().getResourceAsStream(src);
		return inputStream;
	}

③接下来是在struts.xml中进行配置,如下:

<action name="downloadFile" class="edu.njcit.action.updown.UpDownAction" method="download">  
            <result name="success" type="stream">
		 <param name="inputName">downloadFile</param>
		 <param name="contentDisposition">attachment;filename=${upLoadFile.originalName}</param>
		 <param name="bufferSize">1024</param>
	    </result>
 </action>
这样就完成了文件下载。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值