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);
}
});
}
});
我有一个使用 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);
}
});
}
});