将node/express中的文件流式传输到客户端

Tim*_*Tim 40 node.js express

我想将内容流式传输到可能存储在db中的客户端,它们将保存为文件.

显然res.download可以很好地完成这项工作,但是没有响应.*函数接受一个流,只接受文件路径.

我看了一下res.download impl,它只是设置Content-Disposition头,然后是sendfile.

所以我可以使用这篇文章作为指南来实现这一点. Node.js:响应的管道流通过HTTPS冻结

但似乎我会错过res.send执行的所有包装方面.

我在这里遗漏了什么,或者我应该做管道而不用担心 - 这里最好的做法是什么?

目前正在创建临时文件,所以我现在可以使用res.download.

Mor*_*len 93

您可以直接流式传输到响应对象(它是一个Stream).

基本文件流看起来像这样.

function(req, res, next) {
  if(req.url==="somethingorAnother") {
    res.setHeader("content-type", "some/type");
    fs.createReadStream("./toSomeFile").pipe(res);
  } else {
    next(); // not our concern, pass along to next middleware function
  }
}
Run Code Online (Sandbox Code Playgroud)

这将负责绑定data和end事件.

  • @Tim你应该将它标记为已回答,如果它适合你 (2认同)
  • 如果`req.url!=="somethingorAnother",请记得调用`next` (2认同)