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

AL2 Docker部署PHP Lambda+API Gateway返回Base64而非图片

问题解决:API Gateway HTTP API未将Lambda返回的Base64编码GIF转为二进制

排查与修复步骤

1. 确认API Gateway HTTP API的二进制媒体类型配置

  • 进入HTTP API控制台,打开设置标签页,在媒体类型区域添加image/gif(如需支持全类型图片,可添加image/*)
  • 注意:HTTP API的二进制处理基于API层面的媒体类型配置,和REST API的集成响应设置逻辑不同

2. 验证Lambda响应结构的正确性

确保Lambda返回的JSON严格符合以下格式,无额外字符或语法错误:

{
  "isBase64Encoded": true,
  "statusCode": 200,
  "headers": {
    "Content-Type": "image/gif"
  },
  "body": "你的Base64编码GIF字符串"
}
  • 重点校验项:
    • isBase64Encoded是布尔值true,不能是字符串"true"
    • Content-Type必须和API Gateway配置的媒体类型精确匹配(若返回image/gif; charset=utf-8,需同步在API Gateway添加该类型)
    • 响应JSON不能包含多余空格、换行或调试输出(比如PHP的var_dump、echo调试信息会破坏JSON结构)

3. 检查Docker Bootstrap脚本的输出逻辑

确保Bootstrap脚本正确捕获PHP程序的二进制输出,编码为Base64后构造合法JSON:

  • 示例Bootstrap关键逻辑:
#!/bin/sh
set -e
# 执行PHP脚本,仅捕获二进制输出
PHP_OUTPUT=$(php /var/task/your-gif-script.php)
# 转为Base64(-n参数避免添加多余换行)
BASE64_OUTPUT=$(echo -n "$PHP_OUTPUT" | base64)
# 输出标准格式的响应JSON
cat <<EOF
{
  "isBase64Encoded": true,
  "statusCode": 200,
  "headers": {
    "Content-Type": "image/gif"
  },
  "body": "$BASE64_OUTPUT"
}
EOF
  • 确保PHP脚本仅输出GIF二进制数据,无任何额外输出(比如PHP错误报告、日志信息)

4. 确认API Gateway集成模式

检查HTTP API与Lambda的集成是否为代理集成,只有代理集成才会直接使用Lambda返回的响应结构处理内容编码转换。

5. 强制部署HTTP API

若所有配置都正确但问题依旧,尝试重新部署HTTP API——部分配置变更需要部署后才会生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:13:23