下载二进制使用a标签就可以做到,所以可以动态创建标签,下载完成后删除a标签
function downLoad(buffer, name, type){
if(!buffer || !type) return
const blob = new Blob([buffer], {
type: "application/arraybuffer",
});
// 兼容不同浏览器的URL对象
const url = window.URL || window.webkitURL || window.moxURL;
// 创建下载链接
const downloadHref = url.createObjectURL(blob);
// 创建a标签并为其添加属性
const link = document.createElement("a");
link.href = downloadHref;
link.download = `${name || '导出文件'}.${type}`;
// 触发点击事件执行下载
document.body.appendChild(link);
downloadLink.click();
// 下载完成就删掉a标签
document.body.removeChild(link);
//释放blob对象
url.revokeObjectURL(downloadHref);
}
以上完整代码开箱即用
请求文件流的时候也要设置返回参数格式,不然会乱码,以axios为例
axios.post("xxxxx", params, {
responseType: "arraybuffer",
});