我正在尝试在aws lambda上使用puppeteer截取屏幕截图并将屏幕截图上传到s3存储桶。但是,s3.putObject方法似乎不起作用。在lambda控制台上,我得到了#34;上传截图' s3:// $ {s3bucket} / $ {filename}'"和#34;上传已完成"消息但不是"内部回调"信息。奇怪的是,我在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");
}
答案 0 :(得分:2)
解决。
我只更改了存储桶策略的权限,忘了更改CORS配置,这就是导致我的功能失败的原因。
我将<AllowedMethod> PUT </AllowedMethod>
添加到我的CORS配置脚本中,并且上传工作正常。
请记住更改存储桶策略和CORS配置,以便您拥有将文件上传到存储桶的正确权限。