如何将额外数据从客户端传递到弹弓 s3storage?
How to pass extra data from the client over to slingshot s3storage?
我正在尝试将用户 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;
}
});
首先,为了获取当前用户的id,你应该在authorize
方法中使用服务器上的this.userId
,不要简单地相信客户端传递的数据(以确保用户实际上是管理员并验证参数)。
添加到上传的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;
}
});
我正在尝试将用户 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;
}
});
首先,为了获取当前用户的id,你应该在authorize
方法中使用服务器上的this.userId
,不要简单地相信客户端传递的数据(以确保用户实际上是管理员并验证参数)。
添加到上传的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;
}
});