首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过AWS api-gateway返回Base64编码的压缩文件以供下载

如何通过AWS api-gateway返回Base64编码的压缩文件以供下载
EN

Stack Overflow用户
提问于 2020-11-11 23:48:14
回答 1查看 678关注 0票数 0

我构建了一个python lambda,它生成一个包含证书和密码的zip文件。该文件是base64编码的,并通过API网关使用代理集成返回。用浏览器提示下载的命令点击API网关。响应将保存到扩展名为zip的文件中。

保存的文件仍然是base64编码的。最终用户应该会收到一个可用的zip文件。对文件进行Base64解码会得到一个有效的压缩文件。用户应该不需要对文件进行解码。

添加一个API头会导致Content-Encoding网关集成失败,并显示错误:无法对来自lambda的响应进行base64解码。

注意-从b64content中剥离前导字符和尾随字符可以修复str()函数放置前导b'和尾随tic的问题。你能看出我是python和AWS的新手吗?;-)

代码语言:javascript
复制
                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],
                }
EN

回答 1

Stack Overflow用户

发布于 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给了我一半的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64789652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档