【问题标题】:Stream files in node/express to client将 node/express 中的文件流式传输到客户端
【发布时间】:2012-10-28 03:15:36
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

标签: node.js express


【解决方案1】:

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

【讨论】:

  • @Tim 如果对您有用,您应该将其标记为已回答
  • 鉴于赞成票似乎适用于许多人,其中包括我。谢谢!
  • 如果req.url !== "somethingorAnother",记得拨打next
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多