Файл поврежден после загрузки в S3 с использованием Lambda и API Gateway - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь загрузить файл с помощью Lambda в S3 way API GateWay, я использую приведенный ниже код, файл отправляется на S3, например, показывают изображения 'test_using_postman.png' и 's3_file.png', однако, когда я попробуйте открыть, показать сообщение поврежденный файл, например, показать 'open_file_with_problem.png'. Изображения ниже.

Кто-нибудь знает, что случилось?

Спасибо!

Изображения:

Тест с использованием Почтальона: https://drive.google.com/open?id=1eenEnvuMQU28iI_Ltqzpw9OlCvIcY5Fg

S3 Файл: https://drive.google.com/open?id=1b1_CmIhzfc8mQj_rwCK6Xy30gzoP6HcK

Открыть файл с проблемой: https://drive.google.com/open?id=1o54rLB9wWF1KxdUOkq3xAGVET7UWoqgf

код NodeJS:

const crypto = require('crypto');

var AWS = require('aws-sdk');

AWS.config.update({region: 'us-east-1'});

module.exports.arquivo_upload =  (event, context, callback) => {

  let BUCKET_NAME = 'XXXXX';

  let fileContent = event.body;
  let filePath = 'upload/';
  let fileName = crypto.createHash('md5').update('niby_'+Date.now()).digest("hex");

  s3 = new AWS.S3({apiVersion: '2006-03-01'});

  var uploadParams = {
      Bucket: BUCKET_NAME, 
      Key: filePath+fileName+'.png', 
      Body: fileContent,
      ContentType: "image/png"
    };

  s3.upload(uploadParams, function (err, data) {
    if (err) {

      console.error(err);

      callback(null,{
        statusCode:400,
        body: JSON.stringify(err),
      });

    } if (data) {

      //TODO: Call other api to save file name

      console.info(data.Location);

      callback(null,{
        statusCode:200,
        body: JSON.stringify(data.Location),
      });
    }
  });
}

1 Ответ

0 голосов
/ 12 апреля 2020

Я решил эту проблему! Я отправляю файл с помощью base64 в API-шлюз и параметр установки функций лямбда-функции "ContentEncoding: 'base64'".

  var uploadParams = {
  Bucket: config.s3.bucket_name, 
  Key: config.s3.file_path+fileName+obj.extension, 
  Body: buf,
  ContentEncoding: 'base64',
  ContentType: obj.content_type,
  ACL: "public-read"
};
...