【发布时间】:2012-08-03 22:57:15
【问题描述】:
我在 mongodb 中使用 BinData 类型存储图像。
我可以使用 mongojs 查询数据库。
db.images.findOne({
file_name: 'temp.jpg',
},
function(err, data){
console.log(data.image); // image buffer appears on the console
res.writeHead(200, {'Content-Type': 'image/jpg'});
res.end(data.image);
});
这会产生“TypeError:第一个参数必须是字符串或缓冲区”。
我很确定这与缓冲区或编码有关。 有人可以解释一下在发送到浏览器之前我应该对图像数据做什么吗?
【问题讨论】:
-
错误是在 db.images.findOne 行还是在回调函数中抛出的?
-
我认为问题在于回调函数中的图像数据不是“正确”格式
-
你能在你的回调中做一个“typeof data.image”吗?我怀疑问题是 data.image 是图像缓冲区,因此需要将其转换为其他内容才能发回。尝试将其转换为base64,即data.image.toString('base64')
-
typeof data.image 是对象。我不再使用 toString("base64") 到达那里,但浏览器上的图像已损坏。可能是因为图片不是base64而是二进制类型。
-
尝试不带参数的 toString()。此外,您可能想要验证存储在 mongo 中的数据是否没有以某种方式被修改。这里有一些关于如何在 mongo 中存储二进制内容的信息,mongodb.org/display/DOCS/GridFS。未优化的方法也是在存储到 mongo 之前对图像数据进行 base64 编码,因此它将作为字符串存在。然后可以在发送到客户端之前将其读回并转换为二进制。
标签: javascript node.js mongodb