我正在尝试打开一个img文件并通过http发送它。我已经读过,做到这一点的最佳方法是creatReadStream,因为它是异步的,性能更好。
这是我的代码:
var file = fs.createReadStream(image);
file.on("error", function(err){
...
});
res.writeHead(200, {"Content-Type" : "image/png"});
file.on("data", function(data) {
res.write(data);
})
file.on("end", function() {
res.end();
})
我如何知道文件大小让res知道才能在标题中发送?
我不喜欢没有回写的写头,我该怎么办?
谢谢。
答案 0 :(得分:5)
res.writeHead()
调用位于正确的位置,但事件侦听器可以替换为file.pipe(res);
,因为您只将数据从读取流转发到res
的写入流。此外,HTTP响应代码202
似乎不合适,为什么不使用200
。
var file = fs.createReadStream(image);
res.writeHead(200, {"Content-Type" : "image/png"});
file.pipe(res);
答案 1 :(得分:5)
var stat = fs.statSync('path/to/imagefile');
response.writeHead(200, {
'Content-Type' : 'image/png',
'Content-Length': stat.size
});
fs.createReadStream('path/to/imagefile').pipe(response);
答案 2 :(得分:1)
@wayne非常感谢您的回答,但是异步使用stat会不会更好?
var stat = fs.stat(image, function(err,stats) {
if (err) {
req_error(res,err);
} else {
res.writeHead(200, {
'Content-Type' : 'image/png',
'Content-Length': stats.size
});
var file = fs.createReadStream(image);
file.pipe(res);
};
});