注意:
1)A标签直接下载无法修改文件名,但比较简单。有些情况下,没有download属性也会自动下载。
<a href="http://文件链接" download="">下载</a>
2)有按钮的时候不要使用<button>,用<input type="button"/>代替。因为在我做过的项目里面,已经出现了两次使用<button>无法响应事件或修改样式的情况了,具体原因我也没深究。
3)从fastdfs中获取实际文件,传入的参数是fdfsGroup和fdfsPath
byte[] fileByte = fastDFSTemplate.loadFile(fdfsGroup,fdfsPath);
4)jsp完整代码
<input type="button" onclick="download('${attachment.fileName}','${attachment.fdfsGroup}','${attachment.fdfsPath}')"
class="downloadButton fontTypeTwo" value="下载"/>
5)JS代码
/* 下载 */
function download(fileName,fdfsGroup,fdfsPath) {
location.href ="${ctx}/info/notice/download?fileName="+fileName+"&fdfsGroup="+fdfsGroup+"&fdfsPath="+fdfsPath;
}
6)后台完整代码
/**
* 下载
* @param fileName
* @param fdfsGroup
* @param fdfsPath
* @param response
*/
@RequestMapping(value = "download")
public void download(String fileName,String fdfsGroup,String fdfsPath,HttpServletResponse response){
// 设置返回文件名
try {
response.setHeader("Content-Disposition",
"attachment;filename=" + new String(fileName.getBytes("UTF8"), "ISO8859_1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
// 从fastdfs中获取实际文件
byte[] fileByte = fastDFSTemplate.loadFile(fdfsGroup,fdfsPath);
// 输出流
OutputStream out = response.getOutputStream();
// 直接输出
out.write(fileByte);
out.close();
} catch (FastDFSException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}