【问题标题】:s3.upload() works but uploads broken images3.upload() 有效,但上传损坏的图像
【发布时间】:2019-05-28 15:56:42
【问题描述】:

我在 AWS 中有一个 Lambda 函数,它连接到一个 POST 方法,该方法基本上采用图像 URL 并将图像上传到 S3 存储桶。

我的 Lambda 函数如下所示:

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);
    }
  });
};

好像是把图片上传到指定的bucket,但是当我查看图片时好像坏了。

我对将 AWS 用于他们提供的 GUI 之外的任何东西都非常缺乏经验。如果有人对可能发生的事情有任何想法,我将不胜感激。提前致谢!

【问题讨论】:

  • 我刚刚通过 API Gateway 测试了你的 lambda 函数代码,它工作正常,上传到 S3 后没有图像损坏。唯一可能的问题是您的 base64 字符串输入不正确。
  • 这似乎是个问题,我传递的是一个图片 URL,而实际上我应该传递一个 base 64 字符串
  • 哦。很高兴它解决了!!!

标签: amazon-web-services amazon-s3 aws-lambda serverless-framework


【解决方案1】:

上传图像文件时,您还应指定内容类型。对于 jpeg,它是 image/jpeg。对于 png,它是 image/png。如果您省略内容类型,图像可能根本不会显示(只是黑色空间)。

Content-Type

有 node.js 库可以为您确定图像类型。这只是众多此类库之一:

image-type

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

【讨论】:

  • 我认为Content-Type 是一个错字。我用ContentType: 'image/jpeg' 试过了,我仍然看到一个破碎的透明图像
  • 下载文件,然后用图片查看器查看。这将验证文件是否实际有效或已损坏。
【解决方案2】:

对于那些仍在处理类似问题的人。另请考虑,如果您在上传后读取文件,然后发送相同的文件而不将光标重置为 0,您将损坏文件,因为 S3 将从光标所在的位置开始读取。就我而言,我正在阅读它以了解图像的内容。

因此,如果您在调用 upload_fileobj 之前重置光标,它将修复它:

    try:
        file.seek(0) //resets the cursor.
        s3_client.upload_fileobj(
            file,
            bucket_name,

【讨论】:

    猜你喜欢
    • 2020-04-15
    • 2016-04-14
    • 2021-03-15
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2019-08-12
    相关资源
    最近更新 更多