s3.getObject不能在开发环境中工作



这是我的代码,如果我使用本地aws帐户从本地运行它可以正常工作,但它不能从我的开发环境中工作。S3。Getobject API不执行,代码打印下一个日志,跳过Getobject调用:

const unzipFromS3 = (key) => {
return new Promise(async (resolve, reject) => {
log.info("inside unzipfroms3");  
var zlib = require('zlib');
// let fileName = _.replace(key, 'Root/', '');
let options = {
'Bucket': config.bucketName,
'Key': "Root/" + key,
}
log.info("Key:", options);    
await s3.getObject(options).on('error', error => {
log.error(error) }).promise().then((res) => {
yauzl.fromBuffer(res.body, { lazyEntries: true }, function (err, zipfile) {
log.info("Inside Yauzl")
if (err) throw err;
zipfile.readEntry();
zipfile.on("entry", function (entry) {
if (//$/.test(entry.fileName)) {
zipfile.readEntry();
} else {
zipfile.openReadStream(entry, function (err, readStream) {
if (err) throw err;
// readStream.pipe(fs.createWriteStream(`result/${entry.fileName}`));
readStream
.pipe(uploadFromStream(s3));
function uploadFromStream(s3) {
log.info("Inside uploadFromStream")
var pass = new Stream.PassThrough();
let options = {
'Bucket': config.bucketName,
'Key': entry.fileName,
}
var params = { ...options, Body: pass };
s3.upload(params, function (err, data) {
log.error(err, data);
});
return pass;
}
readStream.on("end", function () {
zipfile.readEntry();
});
});
}
});
});
});
});
};

为了使用await,即S3.getObject()的基于承诺的版本,你必须在你的方法调用中添加promise()方法,正如AWS SDK开发人员指南中的使用JavaScript承诺章节所解释的那样。此外,还有一个使用async/await章节,你可以查看一下。

在您的例子中,代码可以修改为:

await s3.getObject(options).promise()
.then((res) => {
yauzl.fromBuffer(/* more code */);
});

最新更新