通过接口请求获取对应的blob文件流
后端代码
@RequestMapping({ "/dowfpath" })
public void downloadattch(@RequestParam("file_path") String file_path, HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0L);
// 查询文件信息
String path = "C:\\Users\\yhl\\Desktop\\SQ\\EPC\\EPC\\src\\main\\webapp\\resources\\img";
file_path = path+"\\1.jpg";
File file = new File(path);
// String[] list = file.list();
String filename = "1.jpg";
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
// 查文件对象blob
ServletOutputStream outputStream = response.getOutputStream();
FileUtils.copyFile(new File(file_path), outputStream);
System.out.println(outputStream.toString());
}
前端代码
let fpath = json.resultlist[i].key;
let fname = json.resultlist[i].value;
var myurl=contxtpath+tablemodel+"/dowfpath.action?t="+new Date().getTime()+"&file_path="+fpath;
var params = {};
params.file_path=fpath;
var xhr = new XMLHttpRequest();
xhr.open('post', myurl)
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8') //我用了json
xhr.responseType = 'blob' //以blob的形式接收数据,一般文件内容比较大
xhr.onload = function() {
var content = this.response //Blob数据
var elink = document.createElement('a') // 创建一个a标签用于下载
elink.download = fname //规定被下载的超链接目标名字
elink.style.display = 'none' //标签隐藏
var blob = new Blob([content])
elink.href = URL.createObjectURL(blob) //规定链接指向的页面的URL
$(".gallerys").append(isGetImgDom(elink.href));
console.log(elink.href,blob.size,blob);
// elink.setAttribute("download",fname);
// document.body.appendChild(elink)
// elink.click() //原生dom触发
document.body.removeChild(elink)
}
xhr.send(JSON.stringify(params))