将数据:image插入MongoDB

时间:2015-02-13 17:45:25

标签: mongodb meteor

我正在尝试将图像插入MongoDB集合,如下所示 -

客户端

var myInfoId = "";
myInfo.findOne({"userID": Meteor.userId()});
myInfoId = myInfoId._id;

var file = theTemplate.find('#myGraphic').files[0];
if (file)
{
    var reader = new FileReader();
    reader.onload = function(e) {
        Meteor.call('updateMyInfo', myInfoId, e.target.result);
        console.log("file = " + e.target.result);
     }
    reader.readAsDataURL(file);
} 

服务器

Meteor.methods({
    'updateMyInfo': function(myInfoId, myGraphic){
        console.log("file = " + myGraphic);
        myInfo.update (
            {"_id": myInfoId},
            {$set: {"myGraphic": myGraphic}}    
        )
    }
})

在两个日志中,我都可以看到数据 -

 file = data:image/jpeg;base64,/9j/4AAQSkZ.....

但是这些数据永远不会进入Collection。我将最大图像大小设置为200x200px,因此数据量不应超过大约24k,因此我认为不需要对数据进行分块。如何插入信息需要做什么?

1 个答案:

答案 0 :(得分:2)

问题出现在您设置id

的最开始
var myInfoId = "";
myInfo.findOne({"userID": Meteor.userId()});
myInfoId = myInfoId._id;

第一行初始化一个变量,第二行进行mongo查找但不对结果做任何事情,第三行只是将初始var设置为未定义的属性。

var myInfoId = myInfo.findOne({userID: Meteor.userId()})._id;

这应该有用。

此外,由于您位于客户端和服务器上的同一用户会话(连接)中,因此您无需从客户端进行设置。实际上,您可以将整个代码更改为:

客户端

var file = theTemplate.find('#myGraphic').files[0];
if (file)
{
    var reader = new FileReader();
    reader.onload = function(e) {
        Meteor.call('updateMyInfo', e.target.result);
     }
    reader.readAsDataURL(file);
} 

服务器

Meteor.methods({
    'updateMyInfo': function(myGraphic){
        myInfo.update (
            {myInfo.findOne({userID: Meteor.userId()})._id},
            {$set: {myGraphic: myGraphic}}    
        )
    }
})