后台返回blob文件流,前端实现下载文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

后台返回blob⽂件流,前端实现下载⽂件
后台返回⽂件流,前端实现下载⽂件
BLOB (binary large object),⼆进制⼤对象,是⼀个可以存储⼆进制⽂件的容器。

⽬的:
后端返回的⽂件是⼀个blob格式的流⽂件,需要前端进⾏转码,得到⼀个url,实现下载⽂件的功能,
这⾥说法⽐较多,但是没有测试,所以列举⼏个⽅法,试⽤
⾸先实现过程
第⼀种:就是先向后端进⾏请求得到返回数据,进⾏转blob,
1.Blob对象的的类型传值不传乱码
2.⽣成URL的时候要是不⾏就写成window.URL.
//请求回来的数据
.then(res => {
let blob = new Blob([res],{
type:'application/vnd.ms-excel' //将会被放⼊到blob中的数组内容的MIME类型
});
let objectUrl = URL.createObjectURL(blob); //⽣成⼀个url
downloadFile(objectUrl,'⽂件名称')
})
downloadFile(content, filename) {
let a = document.createElement('a')
a.href = content
a.download = filename
a.click()
}
第⼆种:
在请求的时候加上 responseType: 'blob' 声明这是⼀个 blob的返回值,
//请求回来的数据
.then(res => {
let blob = new Blob([res]);
let objectUrl = URL.createObjectURL(blob); //⽣成⼀个url
downloadFile(objectUrl,'⽂件名称')
})
downloadFile(content, filename) {
let a = document.createElement('a')
a.href = content
a.download = filename
a.click()
}
总结及注意:
1.就是blob的⽂件格式你得写,要不在返回值之后写⽂件格式,要不然请求的时候就告诉后台你是要blob格式的要不然乱码
2.就都试试,⼤部分第⼀种就⾏
3.还有⼈说: axios请求要是在乱码就加上responseType:'arraybuffer' 试试或者上⾯的说的responseType: 'blob'
4.我觉得应该在封装axios的时候单独封装⼀个请求⽂件的下载,这样⽅便操作,不然要是项⽬⼤了,有点别的,牵⼀发⽽动全⾝。

相关文档
最新文档