如何使用无服务器框架将二进制内容从节点 JS AWS lambda 后端传递到 API 网关?

How can I pass binary content to API Gateway from node JS AWS lambda backend using Serverless framework?

据我们所知,API 网关和 lambda 支持二进制 request/response,但我有一个关于节点后端编程的问题 JavaScript。

环境:

对于上述环境,在我的代码中我将响应内容作为二进制(缓冲区对象数组)。
但是,如果我直接将 Buffer 对象数组作为响应,

callback(null,{
    headers: {'Content-Type': 'image/jpeg'},
    body: body
});

接收响应是这样的:

Content-type: image/jpeg
{type=Buffer, data=[255,216,255,224,0,16,74,70,73,70,0...

如果我将 Buffer 对象数组作为 base64 编码的响应,

callback(null,{
    headers: {'Content-Type': 'image/jpeg'},
    body: body.toString('base64')
});

接收响应是这样的:

Content-type: image/jpeg
/9j/4AAQSkZJRgABAQEASABIAAD/2wBDA...

如何使用无服务器框架从节点 JS 后端向 API 网关提供二进制响应?

== PostScript ==

根据这份文件:

我们必须将集成响应更改的 "Content Handling" 设置为 "CONVERT TO BINARY",以响应二进制响应。
但是我该如何设置呢?
我不知道 serverless.yml 和 AWS 控制台 GUI。

如果我成功设置此内容处理 => 转换为二进制,我可以解决响应二进制响应吗?

== 1 月 17 日编辑 ==

嗨@ka-hou-ieong

你写了rest-api-id和resource-id,它们在下图中,对吧?

但是使用这些 id,命令结果为:

$aws apigateway put-integration-response --rest-api-id XXXXXXXX --resource-id XXXXXX --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY

An error occurred (NotFoundException) when calling the PutIntegrationResponse operation: Invalid Resource identifier specified

这有什么问题吗?我使用最新的 aws-cli (aws-cli/1.11.37 Python/2.7.9 Darwin/16.3.0 botocore/1.5.0)

如果您想将响应强制为二进制响应,您可以通过 AWS CLI 或 API 将 'CONVERT_TO_BINARY' 设置为集成响应的 contentHandling。目前,我们在控制台上缺少此选项。

API

PATCH /restapis/<restapi_id>/resources/<resource_id>/methods/<http_method>/integration/responses/<status_code>

{
    "patchOperations" : [ {
        "op" : "replace",
        "path" : "/contentEncoding",
        "value" : "CONVERT_TO_BINARY"
  }]
}

CLI

aws apigateway put-integration-response --rest-api-id xxxxxxx --resource-id xxxxx --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY