文件下载可以通过超链接的 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>
这样就完成了文件下载。