node.js - 如何快速发送缓冲区数据?
问题描述
我正在尝试创建一个 excel 文件并将其发送给客户端。客户端应该通过 ajax 请求下载文件,因为我需要过滤器参数。
我正在使用 excel4node 包来创建一个 excel 文件。
我写了下面的代码,它现在可以工作,但我怀疑如果我的数据大于缓冲区怎么办。这是使用缓冲区的正确方法吗?(请检查带有 writeToBuffer 方法的行)
const xl = require('excel4node');
const excelCreator = function (data) {...}
app.post('/api/excel', jsonParser, (req, res) => {
let reqObj = {
method: 'post',
url: apiUrl + '/MemberService';,
headers: {
'Content-Type': 'application/json'
},
data: req.body
};
axios(reqObj)
.then(response => {
res.body = responseHandler(response); // a helper function to set res object
let data = res.body.Data;
res.setHeader('Content-Disposition', 'attachment; filename=' + 'excel.xlsx');
res.type('application/octet-stream');
res.body.Data = null;
excelCreator(data).writeToBuffer().then(function (buffer) {
res.body.Data = buffer;
res.send(res.body);
});
})
.catch(...);
});
解决方案
首次安装SheetJS js-xlsx
npm --save install xlsx
然后您可以使用 Express 发送此响应:
const xlsx = require('xlsx')
var wb = xlsx.utils.book_new();
var table = [['a', 'b', 'c'], ['1', '2', '3']]
var ws = xlsx.utils.aoa_to_sheet(table);
xlsx.utils.book_append_sheet(wb, ws, 'test');
// write options
const wopts = { bookType: 'xlsx', bookSST: false, type: 'base64' };
const buffer = xlsx.write(wb, wopts);
res.writeHead(200, [['Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']]);
res.end(new Buffer(buffer, 'base64'));
推荐阅读
- android - 如何向浮动操作按钮添加文本标签?
- docker - 错误:找不到任何已安装的 .NET Core SDK
- postgresql - psql import .csv - 双引号字段和单双引号值
- jquery - jQuery - 如何从复选框值选择器中转义 unicode 字符?
- node.js - 在 Express for Prod 中管理 IIS 上的 HTTPS 签名证书
- swift - 在 WKWebView 中显示使用 Apple ID 登录的弹出窗口与在 Swift 中的 Safari 中显示的相同
- javascript - Highcharts 甘特图设置依赖类型
- javascript - Google Doc API (JavaScript) - batchUpdate - updateTextStyle foregroundColor 返回 500?
- swift - 将 .framework 添加到 Swift 包中?
- reactjs - React + gsap = 为什么在光标移动时渲染?