接口返回二进制文件流前端处理方法
前后端分离项目中,为保证数据安全性,文件数据通常使用接口调用方式获取,后端返回二进制文件流后前端该如何处理。
流数据转链接
获取到的流文件数据(注意:接口调用时需设置responseType:blob)使用Blob构造函数(将二进制数据存储为一个单一个体的集合)进行转换,它接受两个参数。第一个参数是数组,成员是字符串或二进制对象,表示新生成的Blob实例对象的内容;第二个参数是可选的,是一个配置对象。然后通过URL.createObjectURL()方法会根据传入的参数创建一个指向该参数对象的URL.最后返回一个以blob://xxx的浏览器临时路径地址
//(例)将pdf流文件数据转为临时链接地址
let blob = new Blob([res.data],{type:'application/pdf'}
const url = URL.createObjectURL(blob)
对于不同类型文件转换通过改变type的值实现
文件类型分类
常见文件场景有图片、视频、音频、word、excel、pdf这些类别文章来源:https://www.toymoban.com/news/detail-702677.html
文件类型(扩展名) | type类型 |
---|---|
.jpeg .jpg | image/jpeg |
.mp3 | audio/mpeg |
application/pdf | |
.xls | application/vnd.ms-excel |
.doc | application/msword |
application/pdf | |
.mpeg .mp4 | video/mpeg |
非流文件处理
正常情况下会返回流文件前端进行转换,在错误情况下返回报错(json)信息时,这时我们不需要下载文件而是给出错误信息.
接口返回的报错信息是json格式,由于请求设置了responseType:‘blob’,所以会转化为Blob类型.
这时需要使用FileReader读取文件,具体逻辑代码如下文章来源地址https://www.toymoban.com/news/detail-702677.html
//downAllTask为封装的接口方法,params为请求参数
downAllTask(params).then((res) => {
//实例读取文件对象
const r = new FileReader();
r.onload = function () {
try {
// this.result为FileReader获取blob数据,如果返回报错信息,则是正确的json数据,JSON.parse会正常转换
//如果返回文件流,则JSON.parse时会报错,走catch代码块(进行正常的文件下载)
const resData = JSON.parse(this.result);
//resData是后端返回的json数据
if (resData.errorcode===500) {
proxy.$message.warning(resData.msg)
return
}
}catch (error) {
let blob = new Blob([res], { type: "application/zip" });
let url = window.URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = "下载图片";
link.click();
URL.revokeObjectURL(url);
}
}
r.readAsText(res)
}).catch((e)=>{
})
到了这里,关于返回流文件前端处理方法(全)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!