从URL下载多个图像,并从aws-lambda(nodejs)上传到aws-s3



我可以使用此代码将单个图像上传到s3。当我尝试multiple时,只有第一个项被上传,lambda停止执行。我是javascript的新手,所以我不理解这里的问题。

async function downloadImage(url) {
var options = {
uri: url,
encoding: null
};
await new Promise((resolve, reject) => {
request(options, function(error, response, body) {
if (error || response.statusCode !== 200) { 
console.log("failed to get image");
console.log(error);
} else {
s3.putObject({
Body: body,
Key: 'template/'+url.split('/').pop(),
Bucket: bucketName
}, function(error, data) { 
if (error) {
console.log("error downloading image to s3");
} else {
console.log("success uploading to s3");
}
}); 
}   
});
})
.catch((error) => {
console.log("error");
});
}
exports.handler = async (event, _ctx, _cb) => {
var images = {
banner: "http://media.com/strip.png",
icon: "http://media.com/icon.png",
logo: "http://media.com/logo.png"
}

for (const [key, value] of Object.entries(images)) {
console.log(`${key}: ${value}`);
await downloadImage(value);
}
}

我从lambda得到的输出:

2020-10-03T19:11:32.293Z    3cd401a6-08c6-49a2-b01c-99d6430ffc1a    INFO    banner: http://media.com/circle/strip.png
2020-10-03T19:11:33.201Z    3cd401a6-08c6-49a2-b01c-99d6430ffc1a    INFO    success uploading to s3
const downloadImage = async url => {
const options = {
uri: url,
encoding: null
};
const image = await requestPromise(options);
await uploadToS3(image, url);
return 'Uploaded'
}
const requestPromise = options => {
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error || response.statusCode !== 200) {
console.log("failed to get image: ", error);
return reject(error);
}
resolve(body);
})
})
}
const uploadToS3 = (body, url) => {
return new Promise((resolve, reject) => {
s3.putObject({
Body: body,
Key: 'template/' + url.split('/').pop(),
Bucket: bucketName
}, (err, data) => {
if (err) {
console.log("error downloading image to s3", err);
return reject(err)
};
resolve(data);
});
})
}
exports.handler = async (event, _ctx, _cb) => {
try {
const images = {
banner: "http://media.com/strip.png",
icon: "http://media.com/icon.png",
logo: "http://media.com/logo.png"
}
for (const [key, value] of Object.entries(images)) {
console.log(`${key}: ${value}`);
await downloadImage(value);
}
} catch (error) {
console.log('Error in handler: ', error);
return error
}
}

最新更新