我在没有配置代理集成的API GW后面使用lambda函数。 如果我将API GW配置为返回application / json,那么一切都很好。 返回的应用程序/八位位组流无法正常工作。 我的Lambda返回的是这样的内容(以base64二进制编码的数据):
bodyReturn = {
headers: {
"x-amazon-apigateway-binary-media-types" : [
"application/json"
],
'Accept': 'application/json',
'Content-Type': 'application/json',
"Access-Control-Allow-Origin": "'*'",
},
isBase64Encoded: true,
body: Buffer.from(data.Body.toString(), 'binary').toString('base64')
}
在确保我的映射与application / json都可以正常工作之后,我尝试切换到application / octet-stream。 为此,我更新了: 集成响应为应用程序/字节流提供了映射:
#set($inputRoot = $input.path('$'))
$inputRoot.body
我还更新了设置中的二进制媒体类型:
application/octet-stream
当我尝试了上述更改的API时,它仍在答复文本形式,因为我尚未设置/ contentHandling。
现在,当我执行以下命令将/ contentHandling设置为CONVERT_TO_BINARY时,问题开始了:
aws apigateway update-integration-response --rest-api-id xxx --resource-id xxx --http-method GET --status-code 200 --patch-operations '[{"op" : "replace", "path": "/contentHandling", "value" : "CONVERT_TO_BINARY"}]'
发出此命令后,登录云监视抱怨:
Endpoint response body before transformations: [Binary Data]
Execution failed due to configuration error: Unable to transform response
有人知道为什么我的lambda返回的内容突然被视为二进制,而仍然是json吗?
此外,如果我尝试通过以下方式删除/ contentHandling设置:
aws apigateway update-integration-response --rest-api-id xxx --resource-id xxx --http-method GET --status-code 200 --patch-operations '[{"op" : "replace", "path": "/contentHandling", "value" : ""}]'
问题仍然存在,我的lambda中的内容仍然被认为是二进制的。