Успешная загрузка на AWS S3, но говорит, что корзина еще пуста - PullRequest
0 голосов
/ 07 января 2020

Моя функция успешно загружает мое изображение в S3, но я нигде не вижу файл.

const AWS = require('aws-sdk');
let s3= new AWS.S3();


exports.handler = async(event, context, callback) => {


    const promises = [];

        var message_body = JSON.parse(event.body);

        let encodedImage = message_body.base64;
        let decodedImage = Buffer.from(encodedImage, 'base64');

        var params = {
            "Bucket": "mybucket69-bucket",
            "Key": "testkey",
            "Body": decodedImage
        };

        console.log("function triggered. ");

        promises.push(s3.upload(params));

        await Promise.all(promises).then(data => {
            console.log('Success');
            console.log(data);
            callback(null, 'Success Uploading image');
        }).catch(err => {
            console.log(err);
            callback(null, 'Failed to upload image');
        });


};

Журналы Cloudwatch:

enter image description here

Проверялось имя корзины бесчисленное количество раз, проверял, что корзина S3 опубликована c, теперь абсолютно не догадывается, почему корзина все еще пуста

1 Ответ

2 голосов
/ 07 января 2020

Вы пропускаете вызов метода .promise().

promises.push(s3.upload(params).promise());

Без вызова .promise() вызов на загрузку фактически не инициируется. Прочитайте эту статью , чтобы понять распространенные ошибки при использовании NodeJS Promises в AWS Lambda.

Кстати, если вы используете async / await на NodeJS10.x и у вас есть только одно изображение в вашей логике c, как указано в коде ниже, представляет собой значительно упрощенную и читаемую версию того же кода:)

exports.handler = async(event, context, callback) => {
        const promises = [];
        var message_body = JSON.parse(event.body);

        let encodedImage = message_body.base64;
        let decodedImage = Buffer.from(encodedImage, 'base64');

        var params = {
            "Bucket": "mybucket69-bucket",
            "Key": "testkey",
            "Body": "someRandomString"
        };

        console.log("function triggered. ");

        try {
          const data = await s3.upload(params).promise();
          console.log('Success');
          console.log(data);
          return;
        } catch (err) {
          console.log(err);
          throw err;
        }
};

Ниже приведен вывод

START RequestId: 16b2982d-ac4f-18d6-e562-f6d81c973053 Version: $LATEST
2020-01-08T01:31:14.159Z        16b2982d-ac4f-18d6-e562-f6d81c973053    INFO    function triggered. 
2020-01-08T01:31:14.348Z        16b2982d-ac4f-18d6-e562-f6d81c973053    INFO    Success
2020-01-08T01:31:14.352Z        16b2982d-ac4f-18d6-e562-f6d81c973053    INFO    { ETag: '"7c6b8fecf5a9a9925d4115ee4f3c85a6"',
  Location: 'https://sarthakj178.s3.ap-south-1.amazonaws.com/testkey',
  key: 'testkey',
  Key: 'testkey',
  Bucket: 'sarthakj178' }
END RequestId: 16b2982d-ac4f-18d6-e562-f6d81c973053
REPORT RequestId: 16b2982d-ac4f-18d6-e562-f6d81c973053  Init Duration: 1728.90 ms       Duration: 207.42 ms     Billed Duration: 300 ms Memory Size: 128 MB       Max Memory Used: 70 MB

null

И файл создается в S3

aws s3 ls s3://sarthakj178
2020-01-08 07:01:14         16 testkey
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...