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
相关产品推荐
相关产品推荐

