AWS API Gateway:为什么发布请求正文是 base64 编码的?

use*_*064 7 amazon-web-services aws-lambda aws-api-gateway

正在使用 API 网关触发 Lambda 函数,使用 Lambda 代理集成,但是请求正文是 base64 编码的,这是为什么?以及如何将其更改为 JSON 以对 JSON 进行字符串化?

Kav*_*lai 17

如果我正确理解您的问题,您正在将非 Base64 编码的 JSON 负载作为请求发送到 API 网关,但是您的 Lambda 将其作为 Base64 编码的字符串接收。

看来你没有application/json按照你的要求设置content-type。您可以在此表中看到 API 网关如何决定Integration Request Payload(最后一列)是Base64-encoded string类型还是其他类型。

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html

  • @morgler 我也有同样的问题。我发现这是因为我在 API 网关的 BinaryMediaTypes 中添加了“*/*”。删除它就解决了。 (3认同)

小智 11

这是因为您在 API Gateway 中使用 Lambda 代理集成。如果使用Lambda集成就可以了,可以获得JSON。

您也可以将其更改为 JSON,以使用以下方法对 JSON 进行字符串化。

let buff = Buffer.from(event.body, "base64");
let eventBodyStr = buff.toString('UTF-8');
let eventBody = JSON.parse(eventBodyStr);
Run Code Online (Sandbox Code Playgroud)