Aws lambda 如何通过AWS api网关返回Base64编码的zip文件以供下载
我构建了一个python lambda,它生成一个包含证书和密码的zip文件。该文件是base64编码的,并通过API网关使用代理集成返回。使用浏览器提示下载的API网关。响应将保存到具有zip扩展名的文件中 保存的文件仍然是base64编码的。最终用户应收到一个可工作的zip文件。Base64对文件进行解码会生成有效的zip文件。用户不必解码该文件 添加Aws lambda 如何通过AWS api网关返回Base64编码的zip文件以供下载,aws-lambda,aws-api-gateway,Aws Lambda,Aws Api Gateway,我构建了一个python lambda,它生成一个包含证书和密码的zip文件。该文件是base64编码的,并通过API网关使用代理集成返回。使用浏览器提示下载的API网关。响应将保存到具有zip扩展名的文件中 保存的文件仍然是base64编码的。最终用户应收到一个可工作的zip文件。Base64对文件进行解码会生成有效的zip文件。用户不必解码该文件 添加内容编码头会导致API网关集成失败,错误是无法对lambda的响应进行base64解码 注意-从B64内容中删除前导字符和尾随字符修复了放置前
内容编码
头会导致API网关集成失败,错误是无法对lambda的响应进行base64解码
注意-从B64内容中删除前导字符和尾随字符修复了放置前导字符和尾随字符的str()
函数。你能看出我是python和AWS的高手吗?;-)
答案来自两个不同的问题 首先,AWS示例代码是Python2。lambda是蟒蛇3。Python3中字符串和字节的编码已更改,因此需要在返回base64字节数组之前对其进行
.decode('utf-8')
。(编码不是必需的,但是)
其次,API网关没有正确地将返回的数据作为base64编码处理。添加内容编码:base64
头导致API在将base64数据返回到客户端之前对其进行解码
关于运行时封送错误,我得到了一半的答案
headers = {'Content-Type': 'application/zip, application/octet-stream',
'Content-Disposition': f'attachment; filename="{filename}.zip"'
}
if 'b64' in event['params']:
headers['Content-Encoding'] = 'base64'
response = {
'statusCode': 200,
'isBase64Encoded': True,
'headers': headers,
'body': str(b64content)[2:-1],
}