使用Node.js Lambda的S3文件上传问题

时间:2019-01-11 13:59:24

标签: node.js amazon-s3 file-upload aws-lambda

我尝试使用nodejs lambda函数将图像上传到AWS s3存储桶。但是对于初始呼叫,没有文件被上传,而在下一次尝试时,先前的文件被上传。

即使我们在异步等待中使用它,它也不能像同步一样工作。

async uploadAttachment(attachment, id) {
  try {
    let res = '';
    attachment.forEach(async (element, index) => {
      const encodedImage = element.base64;
      const fileTypeInfo = element.fileextType;
      const fileName = `${Math.floor(new Date() / 1000)}_${index + 1}.${fileTypeInfo}`;
      const decodedImage = Buffer.from(encodedImage, 'base64');
      const filePath = `${id}/${fileName}`;
      const params = {
        Body: decodedImage,
        Bucket: process.env.S3_FRF_BUCKET,
        Key: filePath
      };
      res = await s3.upload(params, () => {});
    });
    return res;
  } catch (e) {
    throw e;
  }
}

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

常规数组上的

.forEach不能与async / await一起使用,就像人们期望的那样。请改用for..of

for(let element of attachment) {
  // await actually waits here
}

答案 1 :(得分:1)

您需要像之前建议的for循环以及在s3.upload中添加promise

await s3.upload(params, () => {}).promise();