Я создал метод AWS API Gateway, который вызывает функцию Lambda, которая должна возвращать файл изображения в виде вложения пользователю. Метод API Gateway настроен на использование Lambda Proxy Integration (запросы передаются в Lambda). Моя лямбда-функция очень проста:
const aws = require('aws-sdk');
const s3 = new aws.S3();
exports.handler = async event => {
try {
const Bucket = event.xxx;
const Key = event.yyy;
const file = await s3.getObject({ Bucket, Key }).promise();
return {
body: file.Body.toString(),
headers: {
'Content-Disposition': `attachment; filename=test.jpg`,
'Content-Length': file.ContentLength,
'Content-Type': file.ContentType,
},
statusCode: 200,
};
} catch (e) {
console.error(e);
}
};
Однако загруженные таким образом файлы отличаются по размеру от оригинальных и повреждены.
Например, я пытался загрузить файл 81264 байта, нозагруженная версия имеет размер 146650 байт.
Изучая заголовки ответов от Lambda, я вижу, что Content-Length
на самом деле 67432
(хотя он установлен на file.ContentLength
, что 81264
), но есть и пользовательскийзаголовок x-amzn-Remapped-Content-Length
, который показывает правильный размер (81264
).
Что я должен сделать, чтобы правильно ответить верным файлом обратно?