gpt4 book ai didi

node.js - Node Express 快速 CSV 下载到客户端

转载 作者:行者123 更新时间:2023-12-05 06:58:12 24 4
gpt4 key购买 nike

我设置了一个小型 Node js BE 应用程序,在其之上构建了 express 和 fastCsv 模块。期望的结果是能够将 csv 文件下载到客户端,而不将其存储在服务器内的任何地方,因为数据是根据用户标准生成的。到目前为止,我已经能够找到它,我正在使用流,因为根据用户的选择,该 csv 文件可能非常大。我很确定下面的代码中缺少某些东西:

const fs = require('fs');
const fastCsv = require('fast-csv');
.....
(inside api request)
.....
router.get('/', async(req, res) => {
const gatheredData ...

const filename = 'sometest.csv'

res.writeHead(200, {
'Content-Type': 'text/csv',
'Content-Disposition': 'attachment; filename=' + filename
})

const csvDataStream = fastCsv.write(data, {headers: true}).pipe(res)

})

上面的代码在某种程度上“有效”,因为它确实返回了响应,但不是实际文件,而是 csv 文件的内容,我可以在预览选项卡中将其作为响应查看。总而言之,我试图将该数据流式传输到 csv 中并将其推送以将文件下载到客户端,而不是将其存储在服务器上。非常感谢任何提示或指示。

最佳答案

以下是使用 fast-csv 包在服务器上创建 CSV 文件后对我有用的方法。您需要指定创建输出 CSV 文件的完整绝对目录路径:

const csv = require("fast-csv");
const csvDir = "abs/path/to/csv/dir";
const filename = "my-data.csv";
const csvOutput = `${csvDir}/${filename}`;
console.log(`csvOutput: ${csvOutput}`); // full path

/*
CREATE YOUR csvOutput FILE USING 'fast-csv' HERE
*/

res.type("text/csv");
res.header("Content-Disposition", `attachment; filename="${filename}"`);
res.header("Content-Type", "text/csv");
res.sendFile(filename, { root: csvDir });

您需要确保将响应内容类型和 header 更改为 "text/csv",并尝试将 filename=... 部分包含在 double 中-引号,如上例所示。

关于node.js - Node Express 快速 CSV 下载到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64686464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com