场景

在前端的各种后台管理系统中,往往都会存在大量数据的展示,分析等,一般这种项目都会有数据导出功能,在开发中,一般都是后端返回Blob数据类型,也就是一个二进制对象,那么本篇文章就是讲解前端拿到Blob数据后该怎么处理。

一.Blob

这里简单说一下Blob,全称Binary large Object,二进制大对象(BLOB)是一种可以存储二进制对象或数据的数据类型。

前端中Blob对象的构造函数语法:

new Blob(array, options)

参数array是一个数据序列即数组,可以是任意格式的值,例如,任意数量的字符串,Blobs 以及 ArrayBuffers等。
参数options:用于指定将要放入Blob中的数据的类型(MIME)

二.代码

1.在封装请求的时候一定要记得加上responseType。

   /**
     * 导出exportExcel
     * @param data
     */
    public static exportExcel(data) {
        return axios({
            url: ``,
            method: 'get',
            params: data,
            responseType: "blob"//定义好返回的数据类型
        });
    }

这里就按自己封装的请求来就好,加上 responseType: "blob"即可。

2.拿到Blob数据类型转化为文件并下载。

/**
 * 导出文件下载方法
 * @param data 这个参数就是从接口返回的Blob二进制文件流
 */
const exportFile= (data) => {
      const blob = new Blob([data], {type: "application/vnd.ms-excel;charset=utf-8"});
      const fileName = "文件名" + new Date().getTime() + ".xls";//我这里是文件名加上时间,可以根据自己需求来
      const elink = document.createElement("a"); // 创建a标签
      elink.download = fileName; // 为a标签添加download属性  //命名下载名称
      elink.style.display = "none";
      elink.href = URL.createObjectURL(blob);
      document.body.appendChild(elink);
      elink.click(); // 点击下载
      URL.revokeObjectURL(elink.href); // 释放URL 对象
      document.body.removeChild(elink); // 释放标签
}

这里的话可以根据自己需求封装为公共方法,将文件名也设为入参,二进制文件流导出下载为excel表格方法总体就是这样。

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐