我构建了一个python lambda,它生成一个包含证书和密码的zip文件。该文件是base64编码的,并通过API网关使用代理集成返回。用浏览器提示下载的命令点击API网关。响应将保存到扩展名为zip的文件中。
保存的文件仍然是base64编码的。最终用户应该会收到一个可用的zip文件。对文件进行Base64解码会得到一个有效的压缩文件。用户应该不需要对文件进行解码。
添加一个API头会导致Content-Encoding网关集成失败,并显示错误:无法对来自lambda的响应进行base64解码。
注意-从b64content中剥离前导字符和尾随字符可以修复str()函数放置前导b'和尾随tic的问题。你能看出我是python和AWS的新手吗?;-)
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],
}发布于 2020-11-12 21:26:06
答案是由于两个不同的问题。
首先,亚马逊网络服务的示例代码是Python2。lambda是Python3。字符串和字节的编码在Python3中已更改,因此base64字节数组在返回之前需要.decode('utf-8')。(编码不是必填项,explicit is better than implicit)
其次,应用编程接口网关没有正确地将返回的数据作为base64编码。添加content-encoding: base64头部会导致接口在将base64数据返回给客户端之前对其进行解码。
关于运行时封送处理错误的This question给了我一半的答案。
https://stackoverflow.com/questions/64789652
复制相似问题