返回流文件前端处理方法(全)

编程知识 更新时间:2023-04-03 22:18:11

接口返回二进制文件流前端处理方法

前后端分离项目中,为保证数据安全性,文件数据通常使用接口调用方式获取,后端返回二进制文件流后前端该如何处理。

流数据转链接
获取到的流文件数据(注意:接口调用时需设置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这些类别

文件类型(扩展名)type类型
.jpeg .jpgimage/jpeg
.mp3audio/mpeg
.pdfapplication/pdf
.xlsapplication/vnd.ms-excel
.docapplication/msword
.pdfapplication/pdf
.mpeg .mp4video/mpeg

非流文件处理
正常情况下会返回流文件前端进行转换,在错误情况下返回报错(json)信息时,这时我们不需要下载文件而是给出错误信息.
接口返回的报错信息是json格式,由于请求设置了responseType:‘blob’,所以会转化为Blob类型.
这时需要使用FileReader读取文件,具体逻辑代码如下

//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)=>{
})

更多推荐

返回流文件前端处理方法(全)

本文发布于:2023-04-03 22:18:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/0c29ffe7f26af3efe3977ff5fb181837.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 40212文章数
  • 14阅读数
  • 0评论数