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

如何通过AWS API Gateway转发文件至Flask接口?上传文件损坏排查

问题分析与解决方案

核心原因

AWS API Gateway 默认会对 multipart/form-data 类型的请求 payload 做 base64 编码后转发给后端,但你的 Flask 接口需要接收原始二进制文件数据,这种二次编码会导致图片损坏、payload 体积翻倍。

解决步骤

1. 调整集成请求的内容处理策略

  • 登录 AWS API Gateway 控制台,找到目标 API 和 /image_upload 资源。
  • 进入集成请求选项卡,在内容处理区域,将默认的「通过 passthrough 处理」改为「从不通过 passthrough 处理」。
  • 删除所有自定义的请求有效载荷转换模板,保持无模板状态。

2. 配置二进制媒体类型(关键操作)

API Gateway 默认仅处理文本类 payload,需配置让它识别并直接转发二进制数据:

  • 进入 API 的设置页面,找到二进制媒体类型,添加 multipart/form-data 和具体的图片类型(如 image/jpeg、image/png),也可直接用 */* 覆盖所有类型(建议精准配置)。
  • 修改完成后,重新部署 API 到对应阶段(配置变更必须部署才生效)。

3. 验证后端接收数据(可选排查)

如果配置后仍有问题,可在 Flask 接口中添加日志排查:

@app.route("/image_upload", methods=['POST'])
def image_upload():
    # 打印请求头,确认Content-Type是否正确
    print(request.headers.get('Content-Type'))
    image = request.files['image']
    image_data = image.read()
    # 打印数据长度,对比原始上传的文件大小
    print(f"接收的数据长度: {len(image_data)}")
    base64encoded = base64.b64encode(image_data).decode('utf-8')
    return base64encoded

4. 检查阶段的内容编码设置

  • 进入 API 的部署阶段页面,确认内容编码未启用强制压缩,避免二进制数据被错误压缩篡改。

验证方法

重新部署后再次上传图片,检查返回的 base64 字符串能否正常解码渲染,同时确认 payload 大小与原始文件一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:46:01