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

通过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工作簿

    }

代码示例

源码地址

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理