如何在不先保存文件的情况下流式传输文件?
How to stream a file without saving it down first?
我使用 json2csv
库将下面的代码放在一起,创建了一个名为 example.csv
的 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);
您可以简单地将 json2csv
流通过管道传输到 res
对象,例如:
const ReadableStream = require('stream').Readable;
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);
})
我使用 json2csv
库将下面的代码放在一起,创建了一个名为 example.csv
的 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);
您可以简单地将 json2csv
流通过管道传输到 res
对象,例如:
const ReadableStream = require('stream').Readable;
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);
})