vue使用二进制流下载文件,使用:
link.href = window.URL.createObjectURL(blob);
报错:
Failed to execute ‘createObjectURL’ on ‘URL’: Overload resolution failed.
主要是因为 Chrome 更新后不支持这种用法(其他主流浏览器也不支持),需要改为:
// 增加type 配置,设置下载资源的类型
link.href = window.URL.createObjectURL(new Blob([blob],{type: 'application/zip'}));
完整代码
Vue 二进制流下载文件参考代码
/**
* 下载文件,需要为二进制文件流
* @param {*} blob 文件流
* @param {*} fileName 文件名称
* @param {*} suffix 后缀
* @param {*} type blob类型
*/
fileUtil.downloadFile = (blob, fileName = '', suffix = '.xlsx', type) => {
fileName += suffix
// 该方法支持的浏览器不多(IE10支持),但效率更好
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveOrOpenBlob(blob, fileName)
} else {
const link = document.createElement('a')
// link.href = window.URL.createObjectURL(blob) 主流浏览器已不支持此种方式,通过下面代码处理
link.href = window.URL.createObjectURL(new Blob([blob],{type}))
link.download = fileName
link.click()
window.URL.revokeObjectURL(link.href)
}
}