AWS: пустой документ загружен в корзину S3 с использованием Lambda и API Gateway
Я пытаюсь загрузить PDF- файлы, загруженные в S3 Bucket, который автоматически загружается с помощью функции Lambda с помощью POST- запроса к API- шлюзу, но получается пустым, но для других файлов, таких как.txt, работает нормально.
API-шлюз
/first-endpoint
POST
Тип запроса интеграции - лямбда с включенной прокси-интеграцией. (Включен CORS)
AWS Lambda
const busboy = require('busboy');
const AWS = require('aws-sdk')
const s3 = new AWS.S3();
const headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, POST',
'Access-Control-Allow-Headers': 'Content-Type'
};
function handler(event, context, cb) {
let contentType = event.headers['Content-Type'] || event.headers['content-type'];
console.log('contentType', contentType)
let bb = new busboy({ headers: { 'content-type': contentType } });
bb.on('file', function (fieldname, file, filename, encoding, mimetype) {
console.log('File [%s]: filename=%j; encoding=%j; mimetype=%j', fieldname, filename, encoding, mimetype);
let params = { Bucket: 'test-api-dev-uploads', Key: filename, Body: file, ContentType: mimetype }
s3.upload(params, function (err, resp) {
console.log('resp >> ', resp);
// console.log('Successfully uploaded package.');
cb(null, { statusCode: 200, body: res.Key, headers });
});
})
.on('field', (fieldname, val) => console.log('Field [%s]: value: %j', fieldname, val))
.on('finish', () => {
// context.succeed({ statusCode: 200, body: 'all done', headers });
})
.on('error', err => {
console.log('failed', err);
// context.fail({ statusCode: 500, body: err, headers });
cb(null, { statusCode: 500, body: err, headers });
});
bb.end(event.body);
}
module.exports.hello = handler;
Тестирование с почтальоном
POST-запрос: https://test-api.amazonaws.com/dev/first-endpoint
HEADERS Content-type: application/json
ТЕЛО: форма-данные
CV:(File): PDF file or docx
Я не получаю никакой ошибки, файл PDF загружается в S3, но когда я пытаюсь загрузить и просмотреть, он не имеет содержимого, то есть поврежден пустой файл PDF / docx.
Я пробовал другое решение, например (пытаясь включить двоичные носители в API Gateway)
Новичок в API Gateway. Пожалуйста, предложите, если я что-то упустил в функции API Gateway или Lambda?