通过API网关接收文件并将其上传到S3

时间:2018-06-01 16:46:54

标签: amazon-web-services amazon-s3 aws-lambda

我想知道有一个例子,因为我一直在努力解决这个问题。

1 个答案:

答案 0 :(得分:0)

我过去曾做过类似的事情,但是使用lambda(我猜你也好,因为你用lambda标记了这个问题)。这是一个较旧的,使用node.js 6.10。我还没有检查它是否适用于更高版本。

此示例获取API调用正文中的文件,将其命名,将其保存在S3中并返回文件的新名称。我使用事件id和内容类型标头来创建文件名。

这是来自API Gateway的我的身体映射模板(我设置了几个,我接受的每种内容类型都有一个):

{
    "body": "$input.body",
    "requestId": "$context.requestId",
    "contentType" : "$input.params('Content-Type')"
}  

这是我的lambda代码:

var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
var s3 = new AWS.S3();

exports.handler = function(event, context) {
    var contentType = event.contentType;
    var file = new Buffer(event.body, 'base64');
    var fileType = (contentType.split('/'))[1];
    console.log(fileType);
    var key = event.requestId + '.' + fileType;
    var param = {Bucket: 'aBucket', Key : key,  Body: file};
    s3.putObject(param, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else console.log(data);           // successful response
        console.log('actually done!');
        context.succeed(key);
    });
};