gpt4 book ai didi

node.js - 将写入流中的文件直接传输到客户端作为在 Node.js 中下载

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:05 24 4
gpt4 key购买 nike

因此,我尝试采用一个用作起始模板的文件,在流中向其中添加数据(不更改原始文件),然后将其提供给客户端,而不在服务器上保存新文件(我目前也在使用 Express 模块)。

到目前为止,我在 post 请求中传递数据,将其添加到流的末尾。不幸的是,当您将读取流传输到写入流时,您必须指定写入流的输出文件和位置。有什么办法解决这个问题吗?您可以将输出文件位置设置为相关端口吗?

这就是我目前所拥有的(出现错误:无法管道,不可读):

app.post("/output_xml", function(req, res) {
var data = validateJSON(req.body);
stream_xml(data, res);
});

function stream_xml(data, res)
{
var read_stream = fs.createReadStream(__dirname + '/Static/input_template.xml')
var write_stream = fs.createWriteStream(__dirname + '/Static/output.xml') // trying to prevent saving a file to the server though
read_stream.pipe(write_stream);

read_stream.on('end', () => {
write_stream.write(data);
write_stream.write("\nAdding more stuff");
});

write_stream.pipe(res);
}

我是否可以将 write_stream 行交换为以下内容:

var write_stream = fs.createWriteStream('http://localhost:3000/output_xml/output.xml')

最佳答案

您无法从写入流进行管道传输,但当然可以从转换/双工流进行管道传输。

所以你可以这样做:

const { Transform } = require('stream');

const custom_response = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk, encoding);
callback();
},

flush(callback) {
this.push(data);
this.push("\nAdding more stuff");
callback();
},
});

read_stream.pipe(custom_response).pipe(res);
<小时/>

stream.Transform 的替代方案也可能是stream.PassThrough它采用与 Transform 相同的参数,但您只需要指定 flush 方法。

https://nodejs.org/api/stream.html#stream_implementing_a_transform_stream

关于node.js - 将写入流中的文件直接传输到客户端作为在 Node.js 中下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53567085/

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