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

AWS API Gateway同时传二进制和字符串参数的mapping模板配置问题

问题原因

你出现报错和参数为空的核心原因是:同时传输二进制文件和文本参数时,请求格式为multipart/form-data,而你之前用的$input.params()只能获取URL参数、请求头和application/x-www-form-urlencoded格式的表单参数,无法解析multipart请求中的分段内容,因此要么JSON格式错误报错,要么取不到参数返回空。

解决步骤

前置配置

  • 进入对应API Gateway的「设置」页面,在「二进制媒体类型」中添加multipart/form-data以及你上传的二进制文件对应的MIME类型(比如image/jpeg、image/png),保存配置。
  • 确认你的POST请求的Integration Request页面下,「请求正文 passthrough」设置为「当没有定义模板时,传递请求正文 (WHEN_NO_TEMPLATE)」。

正确Mapping模板配置

在Integration Request的「映射模板」部分,添加Content-Type为multipart/form-data的模板,模板内容如下:

#set($formParts = {})
#foreach($part in $input.path('$.multipart'))
    #if($part.name == "imageFile")
        ## 二进制文件内容做Base64编码避免JSON格式错误
        $util.qr($formParts.put($part.name, $util.base64Encode($part.content)))
    #else
        ## 文本类型参数直接读取内容
        $util.qr($formParts.put($part.name, $part.content.toString()))
    #end
#end
{
    "imageFile": "$!formParts.get('imageFile')",
    "purdueUsername": "$!formParts.get('purdueUsername')",
    "description": "$!formParts.get('description')",
    "price": "$!formParts.get('price')",
    "longitude": "$!formParts.get('longitude')",
    "latitude": "$!formParts.get('latitude')",
    "category": "$!formParts.get('category')"
}
注意事项
  • 后端服务接收到imageFile参数后,需要先做Base64解码才能得到原始二进制文件内容。
  • 提交请求时,所有表单字段的name属性需要和模板中取值的字段名完全一致,文件上传字段的name必须为imageFile。
  • 模板修改完成后必须重新部署对应的API阶段,新配置才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:03