【发布时间】:2018-11-21 05:35:57
【问题描述】:
我正在尝试在 aws lambda 上使用 puppeteer 截取屏幕截图并将屏幕截图上传到 s3 存储桶。但是, s3.putObject 方法似乎不起作用。在 lambda 控制台上,我收到了“上传屏幕截图 's3://${s3bucket}/${filename}'”和“上传完成”消息,但没有收到“内部回调”消息。奇怪的是,在 lambda 执行过程中我没有收到任何错误,但是我无法在 putObject 方法中获取消息,也无法在存储桶中找到屏幕截图。谁能给我一些关于如何调试的建议?
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
module.exports.saveScreenshotToS3 = async(page, s3bucket, filename) => {
let buffer = await page.screenshot({encoding: "base64"});
console.log(`Uploading screenshot 's3://${s3bucket}/${filename}'`);
const s3Params = {
Bucket: s3bucket,
Key: filename,
Body: buffer
};
await s3.putObject(s3Params, (err, data) => {
console.log("inside callback");
if (err) {
console.log(err);
} else {
console.log("uploading succeeded");
}
}).promise();
console.log("uploading completed");
}
【问题讨论】:
-
您正在使用 async 和 await 不正确,await 仅适用于 Promise,所以像这样使用:await s3.putObject(s3Params).promise();
-
感谢您的评论!我修复了我的代码,以免其他人感到困惑。
标签: amazon-web-services amazon-s3 aws-lambda aws-sdk puppeteer