Загрузка файла на S3 через Node.js SDK. Результатом является пустой файл

У нас есть корзина S3, куда мы загружаем несколько файлов.

Когда пользователь загружает файл, он загружается в S3 bucket, но при проверке содержимого файла он оказывается пустым (пустой файл).

   Back End Code
   // Importing modules
   import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
   
  // Setting up S3 client
   const s3 = new S3Client({
     credentials: {
       accessKeyId: process.env.ACCESS_KEY_ID as string,
       secretAccessKey: process.env.SECRET_ACCESS_KEY as string,
    },
    region: s3Info.S3_REGION,
   });

   const pdfContent = Buffer.from(file[0].buffer);
   const params = {
          Bucket: s3Info.S3_BUCKET_NAME,
          Key: getFilePath(fileName),
          Body: pdfContent,
          ContentType: file[0].mimetype,
   };

   // Uploading the document.
   const command = new PutObjectCommand(params);

   const res = await s3.send(command);
   return fileName;

Все работает нормально, но в корзину S3 попадают пустые документы.

🤔 А знаете ли вы, что...
JavaScript поддерживает работу с куки и хранилищем веб-браузера для сохранения данных на клиентской стороне.


3
58
1

Ответ:

Решено

Поскольку я использую AWS Lambda и Serverless Framework для развертывания.

Теперь в моем файле serverless.yml мне не хватало части Binary media types.

Итак, без Binary media types в AWS API Gateway файл загружался, но был пустым.

После добавления plugin под названием serverless-apigw-binary для моей бессерверной системы, а затем добавления типов apigwBinary как application/pdf и multipart/form-data в мой файл serverless.yml, все заработало.

# Example Serverless.yml code
plugins:
  - serverless-apigw-binary

custom:
  apigwBinary:
    types:
      - 'application/pdf'
      - 'multipart/form-data'

В API Gateway мы также можем вручную добавлять типы мультимедиа, как показано на рисунке ниже. Просто нажмите на свой шлюз API, затем выберите «Настройки API», и под ним вы увидите Binary Media Types.