从后端获取excel文件并导出

本文介绍如何从前端发起请求获取后端的Excel文件,并通过Blob对象转换数据格式实现文件下载。文中详细展示了使用axios进行API请求及处理响应的过程。

从后端获取excel文件并导出

1. blob文件类型

首先需要了解什么是blob文件类型,根据官方的示意:

Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。

Blob 表示的不一定是JavaScript原生格式的数据。File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。

要从其他非blob对象和数据构造一个 Blob,请使用 Blob() 构造函数。要创建一个 blob 数据的子集 blob,请使用 slice() 方法。要获取用户文件系统上的文件对应的 Blob 对象,请参阅 File 文档。

​ 接受 Blob 对象的API也被列在 File 文档中。

2. 请求数据并下载

​ 整体思想是这样的,就是正常的API请求,获取文件数据后,在本地模拟一次点击按钮下载,这次下载是在第一次请求api的基础上,把后端返回的文件数据转换成合适的格式之后再下载下来。

//	调用接口,不知道其他后台是怎么写的。但是我这边要是不加上请求的类型responseType的时候,返回值会乱码
Authorizationaxios({
      method: 'post',
      url: `${API_PREFIX}/api/v1/users/Company/Authorized?exportToExcel=true`,
      data: needExportedData,
      responseType: 'blob',
    })

image-20211118104154094

Authorizationaxios({
      method: 'post',
      url: `${API_PREFIX}/api/v1/users/Company/Authorized?exportToExcel=true`,
      data: needExportedData,
      responseType: 'blob',
    }).then((res) => {
      // 获取后台传给前台的数据名
      let tempstr = res.headers['content-disposition'].split('filename*=')[1];
      let downloadName = decodeURI(tempstr.split("'")[2]);
      let bolbUrl = window.URL.createObjectURL(res.data);
      let aDownload = document.getElementById('download');
      aDownload.href = bolbUrl;
      aDownload.download = downloadName;
      aDownload.click();
      window.URL.revokeObjectURL(bolbUrl);
      message.success('下载成功,请耐心等待');
    })

image-20211118104351510正确返回后的data是这样的,我这里将获取的文件内容转换为blob数据类型,这是最常见的下载文件格式。

**decodeURI()** 函数能解码由encodeURI 创建或其它流程得到的统一资源标识符(URI)。这里用它解码出文件名。

创建a标签,用于请求链接和下载文件。

image-20211118110805836

最后实现的结果:

[外链图片转存中…(img-VvVASZ9S-1637205091623)]

最后实现的结果:

image-20211118111004807
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值