【问题标题】:Binary data over AWS Lambda triggered by API GatewayAPI Gateway 触发的 AWS Lambda 上的二进制数据
【发布时间】:2019-06-05 10:39:52
【问题描述】:

我知道关于这个主题有几个类似的问题,但我还没有找到我的确切问题。如果有,请原谅我,请把链接发给我:-)

我有一个由 API Gateway 触发并返回图像/tiff 文件的 base64 编码字符串的 lambda 函数。

我编辑了 API Gateway 配置,以便将字符串转换回二进制数据。

如果我直接使用 AWS 功能测试所有这些,二进制图像代码(.tiff 文件)会正确显示。

但是,如果我通过 Postman 对其进行测试,下载的文件仍然包含 base64 编码的字符串,并且需要进行解码。因此,我不能直接从 API 下载文件,而是必须在客户端进行一些转换,对吗?

这是我通过 Postman 从我的 API 收到的标头:

我也包含了我的 Accept 标头:image/tiff

我的 python lambda 后端返回如下所示: return base64.b64encode(binary_data).decode('ascii')

为什么它在 AWS 控制台上转换为二进制数据,而不是通过 Postman(或 curl)?我有点失落。这是我的集成响应设置:

最后,我想通过无服务器设置所有这些,但我已经很高兴通过 Web 前端让它工作并稍后迁移到无服务器。

提前感谢您的帮助。

【问题讨论】:

  • 如果你发送Accept: */*怎么办?
  • 不幸的是没有区别
  • API Gateway 对于如何设置解码二进制内容所涉及的正确隐藏魔法似乎总是反复无常,尽管我确信这是我自己缺乏详细的理解使它看起来那样.
  • 启用 API 网关上的日志,并将它们设置为 info 级别。然后您可以确切地看到 Cloudwatch 中发生了什么。一个可能的原因是您在 Postman 中缺少 API GW 默认添加的标头。由于日志被截断,我建议您在 lambda 中登录请求的标头(只需 print 并查看 Cloudwatch)

标签: python amazon-s3 aws-lambda postman aws-api-gateway


【解决方案1】:

这不是问题的直接答案,而是一种解决方法:

我们通过生成一个预签名的 url 并从那里显示二进制数据来解决这个问题。这就像一个魅力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2016-09-14
    • 1970-01-01
    • 2021-12-07
    • 2021-07-29
    • 2019-06-19
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多