我想将内容流式传输到可能存储在db中的客户端,它们将保存为文件。
显然res.download可以很好地完成工作,但是没有响应。*函数接受流,只接受文件路径。
我查看了res.download impl,它只是设置了Content-Disposition标头,然后是sendfile。
所以我可以使用这篇文章作为指南来实现这一点。 Node.js: pipe stream to response freezes over HTTPS
但似乎我会错过res.send执行的所有包装方面。
我在这里遗漏了什么,或者我应该做管道而不用担心 - 这里最好的做法是什么?
目前正在创建临时文件,所以我现在可以使用res.download。
答案 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
}
}
这将处理与data
和end
事件的绑定。
答案 1 :(得分:1)
确保来自客户端的AJAX请求设置了适当的“responseType”。例如
$http({
method :'GET',
url : http://url,
params:{},
responseType: 'arraybuffer'
}).success()