amazon-web-services - 成功上传到 AWS S3,但说存储桶仍然是空的
问题描述
我的函数成功地将我的图像上传到 S3,但我在任何地方都看不到该文件。
const AWS = require('aws-sdk');
let s3= new AWS.S3();
exports.handler = async(event, context, callback) => {
const promises = [];
var message_body = JSON.parse(event.body);
let encodedImage = message_body.base64;
let decodedImage = Buffer.from(encodedImage, 'base64');
var params = {
"Bucket": "mybucket69-bucket",
"Key": "testkey",
"Body": decodedImage
};
console.log("function triggered. ");
promises.push(s3.upload(params));
await Promise.all(promises).then(data => {
console.log('Success');
console.log(data);
callback(null, 'Success Uploading image');
}).catch(err => {
console.log(err);
callback(null, 'Failed to upload image');
});
};
云观察日志:
无数次检查 bucketname,确保 S3 存储桶是公开的,现在完全不知道为什么存储桶仍然是空的
解决方案
您缺少.promise()
方法调用。
promises.push(s3.upload(params).promise());
没有.promise()
调用,实际上不会触发上传调用。阅读本文以了解在 AWS Lambda 中使用 NodeJS Promises 时的常见错误。
顺便说一句,如果您在 NodeJS10.x 上使用 async/await 并且您的逻辑中实际上只有一个图像,如代码所示,那么下面是相同代码的一个非常简化且可读的版本:)
exports.handler = async(event, context, callback) => {
const promises = [];
var message_body = JSON.parse(event.body);
let encodedImage = message_body.base64;
let decodedImage = Buffer.from(encodedImage, 'base64');
var params = {
"Bucket": "mybucket69-bucket",
"Key": "testkey",
"Body": "someRandomString"
};
console.log("function triggered. ");
try {
const data = await s3.upload(params).promise();
console.log('Success');
console.log(data);
return;
} catch (err) {
console.log(err);
throw err;
}
};
以下是输出
START RequestId: 16b2982d-ac4f-18d6-e562-f6d81c973053 Version: $LATEST
2020-01-08T01:31:14.159Z 16b2982d-ac4f-18d6-e562-f6d81c973053 INFO function triggered.
2020-01-08T01:31:14.348Z 16b2982d-ac4f-18d6-e562-f6d81c973053 INFO Success
2020-01-08T01:31:14.352Z 16b2982d-ac4f-18d6-e562-f6d81c973053 INFO { ETag: '"7c6b8fecf5a9a9925d4115ee4f3c85a6"',
Location: 'https://sarthakj178.s3.ap-south-1.amazonaws.com/testkey',
key: 'testkey',
Key: 'testkey',
Bucket: 'sarthakj178' }
END RequestId: 16b2982d-ac4f-18d6-e562-f6d81c973053
REPORT RequestId: 16b2982d-ac4f-18d6-e562-f6d81c973053 Init Duration: 1728.90 ms Duration: 207.42 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 70 MB
null
文件在 S3 中创建
aws s3 ls s3://sarthakj178
2020-01-08 07:01:14 16 testkey
推荐阅读
- shiny - 如何为整个导航栏页面着色
- python - Python:ConnectionResetError:连接两次时我的聊天程序中的[WinError 10054]
- c# - 用任务/异步/等待替换后台工作人员?
- javascript - 无法在另一个 javascript 文件中调用 javascript 函数
- algorithm - 将最大堆用于优先级队列的具体目的是什么
- java - 如何发送日期如 0303
- java - 从两个spring服务调用方法时出现中断异常
- c# - 在谷歌表格中的单元格中添加注释c#
- java - 随机生成的数组中的数字总和
- javascript - FullCalendar 事件颜色