我正在尝试将图像插入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,因此我认为不需要对数据进行分块。如何插入信息需要做什么?
答案 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}}
)
}
})