背景:node 服务生成 excel 表格数据流,由前端生成下载链接
解决方法,主要分两步:
(1)node 服务上:基于 node-xlsx 生成 buffer 数据流,如下:
import xlsx from 'node-xlsx';
ctx.body = xlsx.build(excelData); // excelData 数据格式参考 node-xlsx,直接返回 buffer 数据流
(2)前端接收、处理 excel buffer 数据流,并生成临时下载链接:
const res = fetch(url, { method: 'post' }); // 通过原生 fetch 获取数据,fetch 参考 文档
const blobData = await res.blob(); // 取出数据
uploadExcel (blobData , '文件名');
const uploadExcel = (data, fileName) => {
const blob =new Blob([data], {
type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
}); // 转换成 URL.createObjectURL() 识别的 blob
const url = URL.createObjectURL(blob);
const aLink = document.createElement('a');
aLink.download = fileName;
aLink.href = url;
aLink.click();
URL.revokeObjectURL(blob); // URL.revokeObjectURL() 释通过 URL.createObjectURL() 创建而存在的对象
}