52

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

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

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

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

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

我是否在这里遗漏了一些东西,或者我应该只是做管道而不用担心它 - 这里的最佳做法是什么?

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

4

2 回答 2

121

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

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

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事件。

于 2013-07-23T18:44:32.693 回答
1

确保来自客户端的 AJAX 请求具有适当的“responseType”集。例如喜欢

$http({
  method :'GET',
  url : http://url,
  params:{},
  responseType: 'arraybuffer'
}).success()
于 2015-01-31T01:38:24.067 回答