关于node.js:Nodejs-较大文件流下载服务

77次阅读

共计 963 个字符,预计需要花费 3 分钟才能阅读完成。

通过 Nodejs 实现较大文件流下载性能

1. 应用 TypeScript

2. 应用 swc 做代码转译

3. 应用 ES6 模块引入机制

4. 应用管道流提供 Excel 下载服务

次要代码

// 须要引入的模块有 import ExcelJS from 'exceljs';
import ExcelJS from 'exceljs';
@MRoute('/api/file')
async getExcel(req: any, res: any) {
const options = {stream: res, // 若这里不配置则须要应用 workbook.stream.pipe(res); 写入到 res 流中
useStyles: true,
useSharedStrings: true
};
const workbook = new ExcelJS.stream.xlsx.WorkbookWriter(options);
const worksheet = workbook.addWorksheet('数据流', { views: [{ state: 'frozen', xSplit: 1, ySplit: 3}] });
let filename = "数据流表";
res.setHeader('Connection', 'keep-alive'); // 放弃链接始终在
res.setHeader('Content-Type', 'application/octet-stream'); // 文件类型为文件流模式
res.setHeader("Content-Disposition", "attachment; filename=" + encodeURIComponent(filename) + ".xlsx");
res.flushHeaders(); // 先将 headers 返回
// @ts-ignore
// workbook.stream.pipe(res); // 应用管道流将 xlsx 流数据间接写入 response 流中
for (let index = 0; index < 1000000; index++) {const row = [];
for (let i = 0; i < 20; i++) {row.push(i);
}
worksheet.addRow(row).commit(); // commit() 提交换数据
}
workbook.commit(); // 提交整个 Excel 工作簿}

代码示例

源码地址

正文完
 0