首页 > 解决方案 > AWS lambda 函数代理从服务层获取二进制 blob (PDF) 的请求,然后返回给客户端

问题描述

我创建了一个 lambda 函数,以便我可以将其用于验证目的,然后将请求代理到服务层。然后服务层响应包含一个二进制 blob (PDF),它通过 lambda 函数,然后 API 网关最终到达客户端。

我们遇到的第一个问题是 PDF 被转换或损坏,只是返回了空白 PDF。然后我发现这篇文章起初对我没有任何意义。直到我看到这个 aws doc。事实证明,需要将二进制数据编码为 base64,然后将指标“isBase64Encoded”设置为 true。网关最终将响应转换回二进制 blob。

TBH,我是aws的新手,我真的不明白为什么会这样……通过原始二进制blob有什么问题,为什么这些转换步骤是必要的?

这是我必须做的事情的清单

  1. 配置/作为网关上的二进制媒体类型。(我尝试使用 application/pdf,但没有用?)
  2. 确保来自服务层的响应正文未转换为字符串(我使用的是request,默认情况下它给我字符串)。我encoding: null随请求一起发送
  3. 当我从服务层获取 Buffer 数据时,我使用Buffer将响应体转换为 base64 编码。
  4. 在 lambda 输出中,我设置isBase64Encoded为 true

最后,获取未更改的 PDF...

我想知道是否有人可以确认我正在以预期的方式做事?或者,如果有更好的方法?

另外,当我们将二进制支持媒体类型设置为/时,这是否意味着它接受所有媒体类型?但我只希望支持 PDF。

标签: node.jsamazon-web-servicespdfaws-lambdaaws-api-gateway

解决方案


该文档(https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html)应该能够回答您的问题。您需要注意两点:


推荐阅读