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

我写我自己的HTTP模块,如果我需要用二进制文件,例如.jpg,

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

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

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

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

无论如何知道要在Content-Length头中发送什么。 ?

谢谢。

那么你应该只发送响应,并通过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 }); 

还有一个同步版本(因为无论如何你都会阻止文件I / O …),正如这篇文章中提到的那样

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