gpt4 book ai didi

javascript - createReadStream().pipe() 回调

转载 作者:IT老高 更新时间:2023-10-28 23:07:05 26 4
gpt4 key购买 nike

抱歉,我有几个关于 createReadStream() 的问题。

基本上,我正在做的是动态构建一个文件,并在完成后使用 fs 将其流式传输给用户。我正在使用 .pipe() 来确保我的节流正确(如果缓冲区已满,则停止读取,如果没有则重新开始,等等)这是我到目前为止的代码示例。

http.createServer(function(req, res) {
var stream = fs.createReadStream('<filepath>/example.pdf', {bufferSize: 64 * 1024})

stream.pipe(res);

}).listen(3002, function() {
console.log('Server listening on port 3002')
})

我在另一个 StackOverflow 问题(对不起,丢了)中读到,如果您使用常规 res.send() 和 res.end(),那么 .pipe() 效果很好,因为它调用了 .send和 .end 并添加节流。

这在大多数情况下都可以正常工作,除了我想在流完成后删除文件并且不使用 .pipe() 意味着我将不得不自己处理节流以获得回调。

所以我猜我想创建我自己的假“res”对象,它有一个 .send() 和 .end() 方法,这些方法可以做 res 通常做的事情,但是在 .end()我将添加额外的代码来清理生成的文件。我的问题基本上是我将如何做到这一点?

非常感谢您的帮助,谢谢!

最佳答案

关于下载的第一部分可以通过Download file from NodeJS Server回答.

至于在文件全部发送后删除文件,您只需添加自己的事件处理程序即可在所有文件发送完毕后删除文件。

var stream = fs.createReadStream('<filepath>/example.pdf', {bufferSize: 64 * 1024})
stream.pipe(res);

var had_error = false;
stream.on('error', function(err){
had_error = true;
});
stream.on('close', function(){
if (!had_error) fs.unlink('<filepath>/example.pdf');
});

error 处理程序不是 100% 需要的,但是如果在您尝试发送文件时出现错误,您不会删除该文件。

关于javascript - createReadStream().pipe() 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14962085/

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