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