nodejs - fs.createReadStream()。pipe,如何知道文件大小问题

时间:2011-12-20 13:21:36

标签: file http node.js httpresponse

我正在编写自己的HTTP模块,如果我需要使用二进制文件进行响应,例如.JPG,

我使用body = fs.createReadStream(pathOfFile)加载文件。

当我生成响应时,我使用:body.pipe(socket);

但是作为HTTP响应,我想添加一个Content-Length标题。

我找不到一个简单的方法,fs.stat不会立即给出结果,而是在我调用管道之后。

无论如何要知道Content-Length标题中要发送的内容。 ?

感谢。

2 个答案:

答案 0 :(得分:16)

那么你应该只在发送fs.stat的大小后发送响应并传输文件,如下所示:

fs.stat(file_path, function(error, stat) {
  if (error) { throw error; }
  response.writeHead(200, {
    'Content-Type' : 'image/gif',
    'Content-Length' : stat.size
  });
  // do your piping here
}); 

答案 1 :(得分:3)

还有一个同步版本(因为你无论如何都要阻止文件I / O ......),如other post

所述
var stat = fs.statSync(pathOfFile);
response.writeHead(200, {
    'Content-Type' : 'image/jpeg',
    'Content-Length' : stat.size
});
// pipe contents