Node.js AWS S3同步上传文件
我在服务器端使用Meteor,在服务器端使用方法调用返回数据 所以我尝试同步地将文件上传到AWS S3 Bucket 下面是一个示例代码:Node.js AWS S3同步上传文件,node.js,amazon-web-services,amazon-s3,meteor,async-await,Node.js,Amazon Web Services,Amazon S3,Meteor,Async Await,我在服务器端使用Meteor,在服务器端使用方法调用返回数据 所以我尝试同步地将文件上传到AWS S3 Bucket 下面是一个示例代码: Meteor.methods({ uploadImage: function (params) { var AWS = Npm.require('aws-sdk'); AWS.config.loadFromPath(process.env["PWD"]+'/private/awss3/s3_c
Meteor.methods({
uploadImage: function (params) {
var AWS = Npm.require('aws-sdk');
AWS.config.loadFromPath(process.env["PWD"]+'/private/awss3/s3_config.json');
var s3Bucket = new AWS.S3( { params: {Bucket: 'users-profile-pictures'} } );
buf = Buffer.from(params.baseimage.replace(/^data:image\/\w+;base64,/, ""),'base64')
var data = {
Key: params.fileName,
Body: buf,
ContentEncoding: 'base64',
ContentType: 'image/jpeg'
};
s3Bucket.putObject(data, function(err, data){
if (err) {
console.log(err);
console.log('Error uploading data: ', data);
} else {
console.dir(data);
console.log('successfully uploaded the image!');
}
});
return data;
},
});
现在我想返回我从AWS SDK回调中得到的响应。如何同步上传?我不是AWS SDK专家,但根据我的经验,所有internet请求都是异步的,因为服务器需要时间来响应。无论如何,您需要在当前使用时使用它,或者需要异步执行所有脚本,然后添加wait标记以等待函数输出:
wait s3Bucket.putObject(…
我不是AWS SDK的专家,但根据我的经验,所有internet请求都是异步的,因为服务器需要时间来响应。无论如何,您需要按照当前使用的方式使用它,或者您需要异步执行所有脚本,然后添加wait标记以等待函数输出:wait s3Bucket.putObject(…
在Meteor中,您使用wrapAsync
进行异步调用同步:
const putObjectSync=Meteor.wrapAsync(s3Bucket.putObject);
流星法({
上载映像:函数(参数){
var AWS=Npm.require('AWS-sdk');
AWS.config.loadFromPath(process.env[“PWD”]+'/private/awss3/s3_config.json');
var s3Bucket=new AWS.S3({params:{Bucket:'users profile pictures'}});
buf=Buffer.from(params.baseimage.replace(/^data:image\/\w+;base64,/,“”)、“base64”)
风险值数据={
键:params.fileName,
正文:buf,
ContentEncoding:'base64',
ContentType:“图像/jpeg”
};
const result=putObjectSync(数据);
//请注意,错误将抛出一个异常,这是您想要的,如下所示
//它们由Meteor处理,让称为的方法知道
//出了问题。
返回结果;
},
});
在Meteor中,您可以使用wrapAsync
进行异步调用同步:
const putObjectSync=Meteor.wrapAsync(s3Bucket.putObject);
流星法({
上载映像:函数(参数){
var AWS=Npm.require('AWS-sdk');
AWS.config.loadFromPath(process.env[“PWD”]+'/private/awss3/s3_config.json');
var s3Bucket=new AWS.S3({params:{Bucket:'users profile pictures'}});
buf=Buffer.from(params.baseimage.replace(/^data:image\/\w+;base64,/,“”)、“base64”)
风险值数据={
键:params.fileName,
正文:buf,
ContentEncoding:'base64',
ContentType:“图像/jpeg”
};
const result=putObjectSync(数据);
//请注意,错误将抛出一个异常,这是您想要的,如下所示
//它们由Meteor处理,让称为的方法知道
//出了问题。
返回结果;
},
});
这是否回答了您的问题?@AnonCoward我已经使用了wait,但它给出了语法错误意外标记这是否回答了您的问题?@AnonCoward我已经使用了wait,但它给出了语法错误意外标记我已经使用了wait,但它给出了语法错误意外标记否不工作会产生错误:this.makeRequest不是函数this.makeRequest
不出现在该代码中。你确定它没有被抛出到其他地方吗?@Christain我至少在代码中使用了this.makeRequest不工作会产生错误:this.makeRequest不是函数this.makeRequest
不出现在该代码中。你呢你确定它没有被扔到其他地方吗?@Christain我至少在代码中使用了这个.makeRequest