很抱歉,在这里我有几个关于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()上,我会添加额外的代码来清理生成的文件。我的问题基本上是我该如何做到这一点?
如果能帮上忙,我们将不胜感激,谢谢!
发布于 2013-02-20 02:45:57
关于下载的第一部分可以通过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%需要的,但是如果在尝试发送文件时出现错误,则不会删除该文件。
https://stackoverflow.com/questions/14962085
复制相似问题