Я делал нечто подобное в прошлом, но использовал лямбду (что, я думаю, вам подходит, так как вы пометили этот вопрос лямбдой).Это более старый и использует node.js 6.10.Я не проверял, работает ли он в более поздних версиях.
Этот пример принимает файл в теле вызова API, присваивает ему имя, сохраняет его в S3 и возвращает новое имя файла.Я использовал идентификатор события и заголовок типа контента для создания имени файла.
Это мой шаблон сопоставления тела из API Gateway (я настроил несколько, по одному для каждого принятого типа контента):
{
"body": "$input.body",
"requestId": "$context.requestId",
"contentType" : "$input.params('Content-Type')"
}
А это мой лямбда-код:
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);
});
};