Meteor Store图片URL作为头像

时间:2015-04-20 22:50:10

标签: image file meteor amazon-s3 upload

我有一个图像上传器,它使用amazon s3来存储文件。我试图在上传时将我的users.avatar值更新为亚马逊网址。

这是我的上传活动:

Template.avatarUpload.events({
"click button.upload": function(){
    event.preventDefault();
    var files = $("input.avatar-upload")[0].files

    S3.upload({
            files: files,
            path: "avatars"
        }, function(e,r) {
            console.log(r);
    });
  }
})

我基于其他一些stackoverflow QA尝试了类似下面的内容:

首先,但是我遇到了一个问题,我无法存储files.url而没有收到错误(更新失败:MongoError:'$ set'为空。你必须指定一个字段如下:{$ mod :{:...}})

Meteor.users.update({_id:Meteor.user()._id}, {$set:{"profile.name": files.url}})

然后像这样:

var set = {avatar: {}};
    set.avatar[files.url];

    Meteor.users.update({
      _id: Meteor.user()._id
    }, {$set: set});

但没有运气。基本上尝试获取URL并将其存储在users.avatar中。我的json看起来像这样:

users = [{
  username: "normcore",
  avatar: "avatar_url"
}]

2 个答案:

答案 0 :(得分:1)

发布帮助程序的完整代码。

总的来说,这是您的代码应该是这样的:

Template.avatarUpload.events({
    "click button.upload": function(){
        event.preventDefault();
        var files = $("input.avatar-upload")[0].files
        S3.upload({
            files: files,
            path: "avatars"
        }, function(e,r) {
            if(e) {
                console.log(r);
            } else if(r) {
                console.log(r);
                Meteor.users.update(Meteor.user(), {$set: {avatar: r.url}}); // Correct this to actual URL in response. If multiple files 
            }
        });
    },
})

您必须弄清楚如何处理多个文件上传的情况。一种方法是不在输入标记中启用multi。

答案 1 :(得分:1)

这就是我们如何运作的方式。对于有同样问题的人,我会把它留在这里:

客户方:

Template.avatarUpload.events({
"click button.upload": function(){
    event.preventDefault();
    var files = $("input.avatar-upload")[0].files


    S3.upload({
            files: files,
            path: "avatars"
        }, function(e,r) {
            console.log(r);
            console.log(Meteor.user());
            var user = Meteor.user();
            var student = {"_id": user._id };
            console.log(student);
            var url = r.secure_url;
            Meteor.call('updateAvatar', student, url, function(error) {
                if (error) {
                  return console.log(error);
                } else {
                  return console.log('success');
                }
            });
    });
}
});
Template.avatarUpload.helpers({
"files": function(){
    return S3.collection.find();
}
});

服务器端:

Meteor.methods({
    updateAvatar: function(user, url) {
    console.log(user);
    check(user, {
      _id: String
    });
    check(url, String);

    return Meteor.users.update({_id:Meteor.user()._id},
      {
        $set: {
          "profile.avatar": url
         }
      }, function(error) {
        if (error) {
          return console.log(error);
        }
      });
  }
});
相关问题