最近开发一个下载功能,因为传参比较多,请求接口使用了post的方式。post方式接口返回的是文件流,需要对返回的文件流转化成URL来使用。
使用Blob转换文件流
Blob是一个类文件对象,它可以创建一个url
使用Blob时,在请求后端接口时需要设置responseType的值为'blob'
let data = res // 后端返回数据
let blob = new Blog([data]) // 创建Blob对象
if('download' in document.createElement('a')) { // 非IE下载
// 创建隐藏下载超链接
const alink = document.createElement('a')
// 使用超链接的download属性下载文件
alink.download = '下载文件'
// 下载的文件名
alink.style.display = 'none'
// 使用Blob创建一个指向类型化数组的URL
alink.href = URL.createObjectURL(blob)
document.body.appendChild(alink)
// 点击超链接
alink.click()
// 释放URL对象
URL.revokeObjectURL(alink.href)
document.body.removeChild(alink)
}else{ //IE10+下载
navigator.msSaveBlob(blob, filename)
}