【问题标题】:How do I return a Base64 encoded zip file through AWS api-gateway for download如何通过 AWS api-gateway 返回 Base64 编码的 zip 文件以供下载
【发布时间】:2021-02-23 14:47:13
【问题描述】:

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

保存的文件仍然是 base64 编码的。最终用户应该会收到一个工作 zip 文件。 Base64 解码文件会提供一个有效的 zip 文件。用户不必解码文件。

添加 Content-Encoding 标头会导致 API 网关集成失败,并出现无法对来自 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],
                }

【问题讨论】:

    标签: aws-lambda aws-api-gateway


    【解决方案1】:

    答案是由于两个不同的问题。

    首先,AWS 示例代码是 Python2。 lambda 是 Python3。 Python3 中字符串和字节的编码已更改,因此 base64 字节数组在返回之前需要.decode('utf-8')。 (编码不是必需的,但explicit is better than implicit

    其次,API 网关未将返回的数据正确处理为 base64 编码。添加content-encoding: base64 标头会导致API 在将base64 数据返回给客户端之前对其进行解码。

    This question 关于运行时封送处理错误让我得到了一半的答案。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2023-03-14
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多