如何在不先保存文件的情况下流式传输文件?

我将以下代码放在一起,使用 example.csv 库创建了一个名为 json2csv 的 CSV。

我希望不必在将 CSV 文件传递​​到前端进行下载之前保存并存储它。

如果不先保存文件,我似乎无法弄清楚如何将文件流式传输或管道传输到前端。

如何获取 json2csv 库的输出 CSV 文件并将其直接发送到前端?

我的一些代码

    const input = new Readable({ objectMode: true });
    input._read = () => {};
    input.push(JSON.stringify(parsed));
    input.push(null);

    var outputPath = "example.csv";
    const output = createWriteStream(outputPath, { encoding: "utf8" });
    const json2csv = new Transform(opts, transformOpts);

    // Pipe to output path
    input.pipe(json2csv).pipe(output);

    res.setHeader("Content-Type", "text/csv");
    res.download(outputPath);
stack overflow How to stream a file without saving it down first?
原文答案
author avatar

接受的答案

您可以简单地将 json2csv 流通过管道传输到 res 对象,例如:

const ReadableStream = require('stream').Readable;
const Json2csvTransform = require('json2csv').Transform;

app.get('/csv', (req, res) => {
    const stream = new ReadableStream();
    stream.push(JSON.stringify(data));
    stream.push(null);

    const json2csv = new Json2csvTransform({}, transformOpts);
    res.setHeader('Content-disposition', 'attachment; filename=data.csv');
    res.writeHead(200, { 'Content-Type': 'text/csv' });
    stream.pipe(json2csv).pipe(res);
})

答案: