我正在尝试将用户id从FlowRouter.getParam('id');传递到服务器,以便将文件上传到亚马逊。这是一个管理员帐户,所以我使用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;
}
});发布于 2016-08-15 13:00:26
首先,为了获得当前用户的id,您应该在服务器上的authorize方法中使用this.userId,而不是简单地信任客户机传递的数据(以确保用户实际上是管理员并验证参数)。
添加到upload中的meta-context应该是一个对象(您正在传递一个字符串),并且它可以用作指令方法的第二个参数。
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;
}
});https://stackoverflow.com/questions/38948707
复制相似问题