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)

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html

Новичок в API Gateway. Пожалуйста, предложите, если я что-то упустил в функции API Gateway или Lambda?

0 ответов

Другие вопросы по тегам