我正在尝试在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");
}
解决。
我只更改了存储桶策略中的权限,却忘记了更改CORS配置,这就是导致我的功能失败的原因。
我将其添加<AllowedMethod> PUT </AllowedMethod>
到CORS配置脚本中,并且上传成功。
切记同时更改存储桶策略和CORS配置,以便您具有将文件上传到存储桶的正确权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句