本文教您如何不将文件存储在后端,使用nodejs返回文件流给前端直接进行下载
1,后端安装node-xlsx
npm install node-xlsx -S
2,node生成xlsx文件buffer数据流返回给前端
let reserve = await this.service.enterprise.getReserve({ enterprise: _id });//获取当前时间同样信息预定记录
var data = [];
var title = ['序号', "单位", '体检人姓名', '体检人工牌号', '预约日期', '联系方式'];
data.push(title);
//再把每一行数据加进去
for (let f = 0; f < reserve.length; f++) {
let text = reserve[f];
let arr = [];
arr.push(f + 1);
arr.push(text.enterDataName);
arr.push(text.username);
arr.push(text.badge);
arr.push(text.reserveTime);
arr.push(text.phone);
data.push(arr);
}
//由于各列数据长度不同,可以设置一下列宽
const options = { '!cols': [{ wch: 20 }, { wch: 20 }, { wch: 20 }, { wch: 20 }, { wch: 20 }, { wch: 20 },] };
// const options = {};
//生成表格
var buffer = xlsx.build([{ name: 'sheet1', data: data }], options);
this.ctx.body = buffer;
3,前端请求后端地址,并配置请求blob格式数据
let res = axios({
method: "post",
url: url,
responseType: "blob",
})
4,转化成url,并开始下载
const url = URL.createObjectURL(res.data);
const aTag = document.createElement("a");
aTag.setAttribute(
"download",
`文件名称.xlsx`
);
aTag.href = url;
aTag.click();
5,成功下载截图