我正在编写自己的HTTP模块,如果我需要使用二进制文件进行响应,例如.JPG,
我使用body = fs.createReadStream(pathOfFile)
加载文件。
当我生成响应时,我使用:body.pipe(socket);
但是作为HTTP响应,我想添加一个Content-Length
标题。
我找不到一个简单的方法,fs.stat不会立即给出结果,而是在我调用管道之后。
无论如何要知道Content-Length
标题中要发送的内容。 ?
感谢。
答案 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