【问题标题】:Upload to AWS S3 using AWS Lambda使用 AWS Lambda 上传到 AWS S3
【发布时间】:2018-07-12 14:30:33
【问题描述】:

我使用带有 mongoDB 数据库的 node.js 中的 AWS Lambda 在 AWS S3 中上传图像我使用以下代码使用 aws s3 上传图像:

    var fs = require('fs');
    var AWS = require('aws-sdk');
    var config = require('../../server/config');
    var Busboy = require('busboy');
    var busboyBodyParser = require('busboy-body-parser');
    AWS.config.update({ 
      accessKeyId: config.aws.accessKeyId,
      secretAccessKey: config.aws.secretAccessKey,
      region: config.aws.region
    });
    var s3 = new AWS.S3();

module.exports = function(app) {
    app.use(busboyBodyParser());

    app.post('/upload', function(req,res){
        var directory = req.body.directory;  
        var image = req.files.file.name;
        var contenttype = req.files.file.mimetype;
        if(req.body.directory) {
            var file = directory+'/'+image;
        } else {
            var file = image;
        }
        var data = req.files.file.data;
        var keys = {
            Bucket: req.body.bucket,
            Key: file,
            Body: data,
            ACL: 'public-read',
            ContentType: contenttype
        };
        s3.upload(keys, function(err, result) {
            if (err) {
               res.send({
                    isError:true,
                    status:400,
                    message:"File Not Uplaod",
                    data:err
                });
                } else {
                var data = {
                    Location: result.Location,
                    key:result.key,
                    Bucket:result.Bucket
                };
                res.send({
                    isError:false,
                    status:200,
                    message:"File Uplaod",
                    data:data
                });
            }
        });
    });
}

在此代码中,我已在本地成功上传 aws s3 中的图像,但使用 AWS Lambda 此代码不起作用

【问题讨论】:

  • 在测试 Lambda 函数时,是否出现错误?输出是什么?

标签: node.js mongodb amazon-s3 aws-lambda


【解决方案1】:

您需要为 lambda 设置 IAM 角色才能访问 AWS

您还需要为您的 S3 存储桶创建策略

然后将 S3 策略附加到 Lamba IAM 角色。

完成上述操作后,您的 Lambda 将能够访问 S3。

【讨论】:

    【解决方案2】:

    要使用 AWS Lambda 首先,您需要为该特定 lambda 函数提供角色,该角色具有对该存储桶的 AWS S3 的上传权限。 您不需要使用 AWS Lambda 的访问密钥和秘密密钥。

    据我了解,您希望使用 AWS Lambda 从本地目录将图像上传到 AWS S3 存储桶。

    但如果您将相同的代码放入 AWS Lambda 中,它将无法正常工作。 AWS Lambda 是 AWS 的一项服务,部署在他们的云上。因此它将像其他服务一样远程工作。

    首先,您需要部署可以通过 IP 访问图像的文件服务器。它可以在本地服务器上。 然后将该 IP 作为代码中的路径并在代码中进行必要的更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2021-02-28
      相关资源
      最近更新 更多