NodeJS - 以节流速度提供文件

时间:2016-08-16 17:23:39

标签: node.js pipe

我对NodeJS很新,并尝试不同的东西。

我能够做的是使用以下代码下载文件:

app.get('/download', function(req, res){


  var file = 'public/songs/myfile.mp3';

  var filename = path.basename(file);
  var mimetype = mime.lookup(file);

  res.setHeader('Content-disposition', 'attachment; filename=' + filename);
  res.setHeader('Content-type', mimetype);
  res.setHeader('Content-Length', file.length);

  var filestream = fs.createReadStream(file);

  filestream.pipe(res);
});

这很有效,现在我试图实现的目标是看是否有可能限制下载速度。就像有人试图下载文件一样,它将以最大1 Mbps的速度下载(例如)。

我已尝试使用此代码:https://gist.github.com/4poc/1454516

当我加载页面时,它似乎无法加载,但我认为问题是

filestream.pipe(limitStream);

由于没有给出任何回应。

如何实施我想做的事情?或者我如何修复我尝试使用的代码?

1 个答案:

答案 0 :(得分:1)

reqres个对象是流,因此您可以管理响应:

var filestream = fs.createReadStream(file);

filestream.pipe(limitStream).pipe(res);

fwiw:每次拨打pipe()时,都会收到新的信息流。以上内容与此相同:

var filestream = fs.createReadStream(file);

var throttleStream = filestream.pipe(limitStream);

throttleStream.pipe(res);

这一点很重要,因为它很容易做到这一点,但它不会达到你的预期:

var filestream = fs.createReadStream(file);

filestream.pipe(limitStream);

filestream.pipe(res);