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

时间:2012-10-28 03:15:36

标签: node.js express

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

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

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

所以我可以使用这篇文章作为指南来实现这一点。 Node.js: pipe stream to response freezes over HTTPS

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

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

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

2 个答案:

答案 0 :(得分:89)

您可以直接流式传输到响应对象(它是一个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
  }
}

这将处理与dataend事件的绑定。

答案 1 :(得分:1)

确保来自客户端的AJAX请求设置了适当的“responseType”。例如

$http({
  method :'GET',
  url : http://url,
  params:{},
  responseType: 'arraybuffer'
}).success()