通过AWS API Gateway代理上传zip文件到ECS后文件损坏问题求助
这个问题的核心诱因大概率是AWS API Gateway默认会将未配置为二进制类型的请求/响应体按文本编码做转码处理,zip文件属于强二进制格式,哪怕只修改单个字节都会损坏;而图片类二进制内容大概率因为编码特征未被转码逻辑影响,所以表现正常。后端服务直连正常完全排除业务代码问题,按以下步骤排查配置即可:
- 配置API Gateway二进制媒体类型白名单
进入API Gateway控制台,打开对应API的「设置」页,在「二进制媒体类型」配置项中添加application/zip、multipart/form-data两类值,若有其他二进制文件使用场景也可一并添加对应Content-Type。注意配置修改后必须重新部署API到对应阶段才会生效 - 调整VPC集成的Payload格式配置
如果你使用的是HTTP API类型的VPC代理集成,默认的Payload 2.0版本会自动将二进制请求体做Base64编码,并在请求参数中添加isBase64Encoded标识,需要确认后端服务是否做了对应解码逻辑;如果后端没有相关处理,可以将Payload格式版本切换为1.0,或者开启集成的「透传二进制Payload」选项。 - 关闭自动内容编码处理
你的请求头中携带了accept-encoding: gzip, deflate, br参数,若API Gateway开启了自动压缩/解压缩功能,可能会对zip文件内容做额外编码导致损坏,可以在对应API的阶段设置中关闭「压缩内容自动处理」,同时在集成请求中配置透传所有原始请求头不做修改。 - 清除请求体转换模板
确认集成请求配置中没有开启自定义请求体转换模板,如果配置了默认的文本转换规则,会将multipart/form-data格式中的二进制zip内容按UTF-8等文本编码转义,直接删除所有自定义转换模板,选择「透传所有请求体」即可。 - 同步配置下载接口的二进制支持
下载zip文件的响应接口同样需要将返回的Content-Type: application/zip纳入二进制媒体类型白名单,避免API Gateway对返回的二进制内容做转码损坏。
配置完成后可以先通过API Gateway自带的测试功能查看传入后端的原始请求体格式,确认二进制内容没有被转码修改后再正式验证上传下载功能。
内容的提问来源于stack exchange,提问作者Yannis
相关产品推荐
相关产品推荐

