s3.upload () работает, но загружает неработающее изображение - PullRequest
0 голосов
/ 02 января 2019

У меня есть лямбда-функция в AWS, которая подключена к методу POST, который в основном берет URL-адрес изображения и загружает изображение в корзину S3.

Моя лямбда-функция выглядит следующим образом:

var s3 = new AWS.S3();

exports.handler = (event, context, callback) => {
  let encodedImage = JSON.parse(event.body).user_avatar;
  let decodedImage = Buffer.from(encodedImage, 'base64');
  var filePath = "avatars/" + event.queryStringParameters.username + ".jpg"

  var params = {
    "Body": decodedImage,
    "Bucket": "MYBUCKETNAME.com",
    "Key": filePath
  };
  s3.upload(params, function (err, data) {
    if (err) {
      callback(err, null);
    } else {
      let response = {
        "statusCode": 200,
        "headers": {
          "my_header": "my_value"
        },
        "body": JSON.stringify(data),
        "isBase64Encoded": false
      };
      callback(null, response);
    }
  });
};

Кажется, что изображение загружается в указанное место, но при просмотре изображения оно кажется поврежденным.

enter image description here

Я очень неопытен в использовании AWS для всего, что они предоставляют за пределами графического интерфейса.Если кто-нибудь знает, что может происходить, я буду признателен за любую помощь.Заранее спасибо!

1 Ответ

0 голосов
/ 02 января 2019

При загрузке файла изображения вы также должны указать тип контента.Для JPEG это image/jpeg.Для png это image/png.Если вы не укажете тип содержимого, изображение может вообще не отображаться (только черный пробел).

Content-Type

Существуют библиотеки node.js для определенияТип изображения для вас.Это только одна из многих таких библиотек:

тип изображения

var params = {
  Body: decodedImage,
  Bucket: "MYBUCKETNAME.com",
  Key: filePath,
  Content-Type: 'image/jpeg'
};
...