Я пытаюсь перенести приложение Node.js из Облачные функции Google в Amazon Lambda .Приложение загружает файл docx из Amazon S3, обрабатывает его и возвращает этот файл docx.Однако я застрял в процессе возврата файла.В Google Cloud Platform я мог сделать это:
module.exports = function(customENV){ return function(req, res) {
new AWS.S3().getObject({ Bucket: aws_bucket, Key: aws_file }, function(err, data) {
if(!err) {
res.set('Access-Control-Allow-Origin', "*");
res.set('Access-Control-Allow-Methods', 'GET, POST');
res.set('Content-Disposition', `inline; filename="rename.docx"`);
res.type('docx');
res.status(200);
res.end(data.Body, 'binary');
}
});
}};
В Amazon Lambda я повторил решение следующим образом:
exports.handler = function(event, context, callback) {
new AWS.S3().getObject({ Bucket: aws_bucket, Key: aws_file }, function(err, data) {
if(!err) {
var response = {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': "*",
'Access-Control-Allow-Methods': 'GET, POST',
'Content-type' : 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'Content-Disposition': 'inline; filename="rename.docx"'
},
isBase64Encoded: true,
body: data.Body,
};
callback(null, response);
}
});
};
В качестве шлюза API я использовал LAMBDA_PROXY с ЛЮБЫМ методом.Модели / ответы / отображения все по умолчанию.Однако единственный ответ, который я получаю, это «Внутренняя ошибка сервера».В журналах CloudWatch я также вижу «Выполнение не удалось из-за ошибки конфигурации: Невозможно base64 декодировать тело».
Я попытался тиражировать различные решения и / или различные конфигурации API-шлюза, но безуспешно.Возможно, я просто не понимаю API-шлюз Amazon и поэтому не знаю, как правильно его настроить.
Возможно, как говорит журнал, это может быть и преобразование данных, но я пробовал преобразования, такие как toString ("base64") , также безуспешно.
Любые идеи, что я долженсделать, чтобы это минимальное решение работало?Спасибо!