我试图将用户id从FlowRouter.getParam('id');
传递到服务器以将文件上传到amazon。这是一个管理帐户,所以我使用FlowRouter.getParam('id');
来访问正确的用户配置文件信息。问题是我没有正确地传递id,所以它只是错误和停止工作。
如何正确传递id ?
路径uploadFile.js
let _uploadFileToAmazon = ( file ) => {
var id = FlowRouter.getParam('id');
const uploader = new Slingshot.Upload( "uploadProfileImgAdmin", id );
uploader.send( (file), ( error, url ) => {
if ( error ) {
Bert.alert( error.message, "warning" );
_setPlaceholderText();
} else {
_addUrlToDatabase( url );
}
});
};
路径server/uploadFile.js
Slingshot.createDirective( "uploadProfileImgAdmin", Slingshot.S3Storage, {
bucket: "bhr-app",
region: "ap-southeast-2",
acl: "public-read",
authorize: function (id) {
console.log("user id: ", id);
return Files.findOne( { "userId": id } );
},
key: function ( file ) {
var user = Meteor.users.findOne( _id: id );
return "profile-images" + "/" + user.emails[0].address + "/" + file.name;
}
});
首先,为了获得当前用户的id,您应该在authorize
方法中使用服务器上的this.userId
,而不是简单地信任客户端传递的数据(以确保用户实际上是管理员并验证参数)。
添加到上传的元上下文应该是一个对象(你正在传递一个字符串),它可以作为指令方法的第二个参数。
const uploader = new Slingshot.Upload("uploadProfileImgAdmin", {id});
在服务器上,你的指令的方法得到file
和meta
你通过:
Slingshot.createDirective( "uploadProfileImgAdmin", Slingshot.S3Storage, {
bucket: "bhr-app",
region: "ap-southeast-2",
acl: "public-read",
authorize: function (file, meta) {
console.log("user id: ", meta.id);
// validate meta, make sure that the user is an admin and
// return a Boolean or throw an error
},
key: function (file, meta) {
var user = Meteor.users.findOne(meta.id);
return "profile-images" + "/" + user.emails[0].address + "/" + file.name;
}
});