【发布时间】:2014-09-02 15:02:51
【问题描述】:
我是 mongodb 的新手。
我使用以下代码 sn-p 存储二进制数据:
var data = fs.readFileSync(path);
var image = new mongodb.Binary(data);
//open connection/collection
var record = {picname: id, content: image };
collection.save(record, {safe: true}, function(err,result){
if(err)
console.log(err.stack);
});//save
我可以看到 db 中的记录大小。有二进制数据。记录大小也与文件大小相匹配。很开心。
现在,从 mongo 检索到相同的二进制数据并尝试发送它作为响应:
var record = {picname: id};
collection.findOne(record, function(err,result){
if(err)
console.log(err.stack);
else
{
console.log('before read from db for download.');
//HOW TO READ IMAGE/BINARY DATA FROM RESULT?
//I need to send result in response. Any Idea?
console.log('before read from db for download');
}
});
我正在使用以下代码 sn-p 发送二进制数据。它不适用于所有文件。可能是什么问题:
collection.findOne(record, function(err,result){
if(err)
console.log(err.stack);
else
{
console.log('before read from db for download. result: [' + result.picname + " ], type: " + result.imagetype);
res.end(result.content.buffer, "binary");
console.log('Responded SUCCESS: ' + id );
}
});//findOne
请告诉我如何通过响应检索和发送。
提前致谢 DD。
【问题讨论】:
-
您说“它不适用于所有文件”。它适用于哪些文件,不适用于哪些文件;有模式吗?另外,如何它不起作用?您是否收到错误,文件是否损坏等?
-
注意到 gif 有时无法正常工作。
-
考虑使用GridFS,之后就可以用下面的方式写了:
file.stream(true).pipe(res); -
在 Mongodb 中存储图像。不在 GridFS 上。将二进制数据存储到 Mongodb 中。通过 findOne 从 Mongodb 获取二进制数据。我应该为小于 4MB 的图像使用 GridFS。请提出建议。
-
如果你的文件小于 4Mb,它可以在没有 GridFS 的情况下工作。但是使用 GridFS 更灵活。它可以让您在不改变未来解决方案的情况下成长。