使用AWS Lambda和API Gateway下载ZIP文件遇格式问题求助
问题诊断与解决方法
核心问题:Base64编码引入多余换行符
你的代码中使用Base64.encode64处理ZIP文件内容,这个方法会每76个字符自动插入换行符。但API Gateway要求Base64编码的响应体必须是无换行的连续字符串,这些换行符会导致解码后的ZIP文件结构损坏,最终无法正常打开。
修复步骤
1. 替换Base64编码方法
将Base64.encode64替换为Base64.strict_encode64,该方法不会添加任何换行符,生成的编码字符串完全符合API Gateway的要求:
'body': Base64.strict_encode64(zip_file),
(无需额外的force_encoding('UTF-8'),strict_encode64本身返回的就是UTF-8编码的字符串)
2. 确认API Gateway二进制媒体类型配置
必须在API Gateway中把application/zip添加到二进制媒体类型列表,否则网关可能会对响应进行额外处理,导致文件损坏:
- 进入API Gateway控制台,选中你的目标API
- 切换到「设置」页面,找到「二进制媒体类型」选项
- 添加
application/zip并保存配置 - 重新部署API,确保配置生效
额外验证点
- 检查
reports.download_and_compress_files生成的ZIP文件本身是否完好:可在Lambda日志中输出文件大小,或本地测试该方法生成的ZIP能否正常打开,排除文件生成环节的问题。 - 确保响应头
Content-Type严格设置为application/zip,避免拼写错误。
内容的提问来源于stack exchange,提问作者lealvcon
相关产品推荐
相关产品推荐

