Alb*_*elB 15 javascript node.js
提前抱歉,我在这里有关于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')
})
Run Code Online (Sandbox Code Playgroud)
我已经阅读了另一个StackOverflow问题(抱歉,丢失了它),如果你使用常规的res.send()和res.end(),那么.pipe()效果很好,因为它调用.send和.end并添加限制.
这对大多数情况都适用,除了我想要在流完成后删除文件而不使用.pipe()意味着我将不得不自己处理限制以获得回调.
所以我猜我要创建自己的假"res"对象,它有一个.send()和.end()方法,它可以执行res通常所做的事情,但是在.end()上我会添加其他代码来清理生成的文件.我的问题基本上是如何解决这个问题?
非常感谢帮助,谢谢!
log*_*yth 28
关于下载的第一部分可以通过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');
});
Run Code Online (Sandbox Code Playgroud)
该error处理器是不是100%必要的,但这时如果有一个错误,而你正在尝试发送它不会删除该文件.
| 归档时间: |
|
| 查看次数: |
34932 次 |
| 最近记录: |