Проблема загрузки файла S3 с использованием nodejs lambda - PullRequest
0 голосов
/ 11 января 2019

Я попытался загрузить изображение в корзину aws s3, используя лямбда-функцию nodejs. Но для начального вызова никакие файлы не загружаются, и при попытке в следующий раз загружается предыдущий файл.

также он не работает синхронно, даже если мы использовали внутри async await.

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 голосов
/ 12 января 2019

Вам необходим цикл for, как предлагалось ранее, а также добавление обещания в s3.upload

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

0 голосов
/ 11 января 2019

.forEach в обычном массиве не работает с async / await, как и следовало ожидать. Вместо этого используйте for..of.

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