createReadStream()。pipe()callback

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

基本上我正在做的是dynamic构build一个文件,并使用fs将其stream式传输给用户。 我正在使用.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并添加节stream。

这对大多数情况下工作正常,除了我想删除文件一旦stream完成,而不是使用.pipe()意味着我将不得不处理扼杀自己只是为了获得callback。

所以我猜我想创build我自己的假“res”对象,它有一个.send()和.end()方法来完成res通常做的事情,然而在.end()把额外的代码清理生成的文件。 我的问题基本上是如何解决这个问题?

帮助与此将不胜感激,谢谢!

       

网上收集的解决方案 "createReadStream()。pipe()callback"

关于下载的第一部分可以通过从NodeJS服务器下载文件来回答。

至于在文件全部被发送后删除文件,你可以添加你自己的事件处理程序来删除文件,一旦发送完毕。

 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%需要的,但如果在尝试发送时出现错误,则不会删除该文件。