You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda返回图片在API Gateway中无法显示的技术求助

问题

使用Node.js开发AWS Lambda时遇到以下问题:Lambda从S3获取PNG图片,通过Sharp库调整尺寸后返回,但通过API Gateway端点发起GET请求时图片无法显示。已验证生成的Base64字符串可正常转换为PNG,且响应头包含正确的Content-Type。Lambda核心代码如下:

// create a new image using provided dimensions.
const result = await Sharp(originalImage.Body, { failOnError: true })
    .resize(width, height)
    .rotate()
    .toBuffer();

// return created image as a response.
return {
    statusCode: 200,
    body: result.toString('base64'),
    isBase64Encoded: true,
    headers: {
        'Accept-Ranges': 'bytes',
        'Content-Type': originalImageMime,
        'x-amz-meta-content-type': originalImageMime,
        'Cache-Control': DEFAULT_CACHE_HEADER,
        'Age': 0
    }
};

请问是否遗漏相关配置,或是AWS API Gateway/Lambda的设置导致此问题?

排查与解决方案

  • 检查API Gateway集成模式与响应配置
    如果用的是Lambda代理集成,确认API Gateway没有额外修改响应格式;如果是非代理集成,必须配置响应模板,直接输出base64内容,避免把响应包裹在JSON结构里,比如在响应模板中设置$input.path('$'),确保body的base64直接被解析输出。
  • 验证响应头的有效性
    暂时去掉Accept-Ranges和Age头试试,部分浏览器可能对这些头的异常值敏感。同时确认originalImageMime确实是image/png,可以在Lambda里打印这个值,避免传入错误的MIME类型。
  • 确认isBase64Encoded字段被正确识别
    在API Gateway的测试控制台中查看实际返回的响应,检查body是否是原始的base64字符串,没有被转义或添加额外字符。如果API Gateway忽略了这个字段,会把base64当作普通文本返回,导致浏览器无法解析。
  • 排除Sharp处理的潜在问题
    把Sharp处理后的buffer直接上传到S3测试桶,通过S3的公开链接访问图片,确认图片本身没有损坏。如果S3能正常显示,说明问题出在API Gateway和Lambda的交互环节。
  • 关闭API Gateway的内容压缩
    图片本身已经是压缩格式,API Gateway的gzip压缩可能导致内容损坏。进入API Gateway的阶段设置,找到"压缩"选项,关闭后再测试请求。

内容的提问来源于stack exchange,提问作者Matster2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:27:04