首页 > 解决方案 > 成功上传到 AWS S3,但说存储桶仍然是空的

问题描述

我的函数成功地将我的图像上传到 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');
        });


};

云观察日志:

在此处输入图像描述

无数次检查 bucketname,确保 S3 存储桶是公开的,现在完全不知道为什么存储桶仍然是空的

标签: amazon-web-servicesamazon-s3aws-lambda

解决方案


您缺少.promise()方法调用。

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

没有.promise()调用,实际上不会触发上传调用。阅读本文以了解在 AWS Lambda 中使用 NodeJS Promises 时的常见错误。

顺便说一句,如果您在 NodeJS10.x 上使用 async/await 并且您的逻辑中实际上只有一个图像,如代码所示,那么下面是相同代码的一个非常简化且可读的版本:)

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

推荐阅读