AWS Lambda部署后Multipart请求报错:Required参数未指定
问题分析
本地测试Multipart文件上传正常,但部署到AWS Lambda+API Gateway后报错Required argument [CompletedFileUpload attachment] not specified,核心原因是API Gateway代理Lambda时不会自动解析Multipart表单数据,而是将原始请求体以base64编码形式传递给Lambda,导致后端框架无法正确识别表单中的attachment字段。
解决方案
1. 配置API Gateway传递原始Multipart数据
在API Gateway的POST方法集成设置中调整Content Handling:
- 进入API Gateway控制台,找到对应
/attachments/{id}资源的POST方法 - 切换到「集成请求」标签,找到「Content Handling」选项
- 设置为
CONVERT_TO_BINARY,确保API Gateway将原始二进制的Multipart请求体(base64编码后)传递给Lambda,而非自动解析为JSON格式
2. 确保后端框架支持Lambda环境下的Multipart解析
如果使用Micronaut框架,需添加配置以处理Lambda的base64请求体:
在application.yml中添加:
micronaut: server: multipart: enabled: true aws: lambda: proxy: enabled: true
该配置会让Micronaut自动处理Lambda代理模式下的base64编码请求体,正确解析Multipart表单数据。
3. 验证请求头传递
确认API Gateway未篡改Content-Type请求头:
- 在API Gateway的「集成请求」中,检查「HTTP请求头」映射,确保
Content-Type头被原样传递(添加Content-Type映射,值为method.request.header.Content-Type) - 客户端发送请求时必须携带完整的
Content-Type: multipart/form-data; boundary=<your-boundary>头,缺少boundary会导致解析失败
额外排查点
- 检查Lambda执行角色是否有足够权限读取请求体(默认权限一般足够,自定义策略需额外确认)
- 在Lambda中打印完整event内容,确认
body字段为base64编码的Multipart数据,且headers.Content-Type格式正确
内容的提问来源于stack exchange,提问作者Kartik Kodag
相关产品推荐
相关产品推荐

