node.js - AWS S3 putObject 回调未触发
问题描述
我有一个 lambda 函数试图将一个 mp3 文件放入 S3 存储桶,但是我没有看到我的文件已上传,更奇怪的是,没有看到来自回调的任何日志记录/响应。
我的 lambda/s3 存储桶都在同一个 AWS 账户上,存储桶名称绝对正确。
我在这里缺少什么吗?或者任何解释为什么我的回调没有被触发?
exports.handler = async (event, context, callback) => {
// prior setup
console.log('about to putObject on s3');
const s3BucketData = {
Bucket: 'media-files',
Key: fileName,
Body: fileDataBuffer,
ContentType: 'audio/mp3'
};
await s3.putObject(s3BucketData, (err, data) => {
console.log('putObject callback executing');
if (err) {
console.log('err occurred storing to s3: ', err)
} else{
console.log(`${fileName} succuessfully uploaded`);
}
context.done();
});
};
解决方案
首先,将方法粘贴在处理程序函数中是一种不好的做法。其次,您的运行时存在一些问题。我的意思是您选择了支持等待/异步的节点 8.10,但您仍在尝试使用回调。我有一些意见给你。我希望它会帮助你。
1)你可以简单地做到这一点:
export async function handler(event)
{
// body of your function
};
2) AWS 服务承诺。您必须重新编写您的 s3 方法。看看下面的代码片段。我有一个问题。确定您必须使用 putObject 方法而不是上传吗?
try
{
let s3= new AWS.S3({ region: process.env.AWS_REGION, apiVersion: '2006-03-01' });
let params =
{
Bucket: //aws s3 bucket location (a full path),
Key: //file name/key,
Body: //entity to upload,
ACL: 'public-read' // access policy,
ContentType: 'audio/mp3'
};
let s3Response = await s3.upload(params).promise();
// request successed
console.log(`File uploaded to S3 at ${s3Response.Bucket} bucket. File
location: ${s3Response.Location}`);
return s3Response.Location;
}
// request failed
catch (ex)
{
console.error(ex);
}
如果你想坚持回调然后:
s3.upload(params, (err, data) =>
{
console.log('putObject callback executing');
if (err)
{
console.error('err occurred storing to s3: ', err);
return ;
}
console.log(`${fileName} succuessfully uploaded`);
return data;
});
我希望你会发现这很有帮助。干杯!
推荐阅读
- python - 显示一个表格,将模型实例显示为行,并让用户选择要删除的实例(行)
- javascript - 将下拉列表更改为依赖下拉列表
- architecture - 三层架构的业务层中是否可以有多个对象
- python - 带有散点图的 matplotlib 动画
- mysql - SQL 函数在调用两次时导致数据库服务器 (MariaDB) 上的 Segfault
- php - 登录pdo后如何打印用户名
- reporting-services - 在 SSRS 2016 中使用自定义 dll 运行 SSRS 报告时出现问题。未能授予执行权限
- android - 将宽度匹配的父级分配给水平滚动视图内的卡片视图
- scala - 如何在scala的for循环中将字符串附加到列表或数组?
- matlab - 如何在 MATLAB 中以乳胶格式发布符号矩阵?