Meteor Store Image URL 作为头像

Meteor Store Image URL as Avatar

我有一个使用 amazon s3 存储文件的图片上传器。我正在尝试在上传时将我的 users.avatar 值更新为亚马逊 url。

这是我的上传事件:

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);
    });
  }
})

我根据其他一些 Whosebug 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"
}]

Post 助手的完整代码。

总的来说,您的代码应该如下所示:

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。

这就是我们让它工作的方式。我会把这个留给有同样问题的人:

客户端:

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);
        }
      });
  }
});