首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过API网关使用lambda服务存储桶镜像资源会导致镜像损坏

通过API网关使用lambda服务存储桶镜像资源会导致镜像损坏
EN

Stack Overflow用户
提问于 2020-09-11 04:00:40
回答 1查看 136关注 0票数 1

我正在使用AWS Api Gateway、Lambda和S3。

我的目标是进入网关,在浏览器中提供并显示我的S3存储桶中的图像。目前,我可以使用我的lambda中的AWS SDK从适当的存储桶中成功获取图像,没有问题。然后我通过网络as发送它,响应是200,我可以看到所有合适的标头。然而,图像被破坏了。

下面是我的lambda中的代码:

代码语言:javascript
复制
const AWS = require('aws-sdk');

const s3 = new AWS.S3();

exports.handler = async (event) => {
  const bucketParams = {
    Bucket: 'my-bucket',
    Key: 'build/cat.jpg',
  };
    
    const bucket = await s3.getObject(bucketParams).promise();
    
    const response = {
        statusCode: 200,
        body: Buffer.from(bucket.Body).toString(),
        headers: {
            'Accept-Ranges': 'bytes',
            'Content-Length': bucket.ContentLength,
            'Content-Type': bucket.ContentType,
            'Last-Modified': bucket.LastModified,
            'ETag': bucket.Etag,
        }
    };
    
    return response;
};

响应是200,一切正常,但我的图像在浏览器中似乎损坏了。以下是示例https://3bn2t9npbd.execute-api.us-east-1.amazonaws.com/dev/cat.jpg的uri

顺便说一句,通过这段代码,我提供的不仅仅是图片,上面的例子只是一张图片。

EN

回答 1

Stack Overflow用户

发布于 2020-09-11 06:57:41

我找到了解决我问题的办法。感谢jarmod为我指明了正确的方向。我首先必须在我的AWS网关设置中为所有内容启用二进制媒体类型,如下所示。

之后,我将lambda代码更改为response:

代码语言:javascript
复制
const bucket = await s3.getObject(bucketParams).promise();
    
const response = {
  statusCode: 200,
  body: Buffer.from(bucket.Body).toString("base64"),
  headers: {
    'Accept-Ranges': 'bytes',
    'Content-Length': bucket.ContentLength,
    'Content-Type': bucket.ContentType,
    'Last-Modified': bucket.LastModified,
  },
  isBase64Encoded: true,
};
    
return response;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63836880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档