当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用无服务器框架从节点JSAWSlambda后端将二进制内容传递给API网关?》经验,为你挑选了0个好方法。

众所周知,API Gateway和lambda支持二进制请求/响应,但我对节点JavaScript中的后端编程有一个疑问.

环境:

使用无服务器框架,与lambda(非lambda-proxy)集成.

响应头映射是:
Content-Type:integration.response.body.headers.Content-Type

响应模板映射为:
image/png:$ input.path('$.body')
image/jpeg:$ input.path('$.body')

为image/png和image/jpeg启用二进制支持

在上述环境中,在我的代码中,我将响应内容作为二进制(缓冲对象数组).
但是,如果我直接将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...

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

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

收到回复是这样的:

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

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

== PostScript ==

根据此文档:
没有Accept标头的AWS API Gateway二进制输出
我们必须将Integration响应的"Content Handling"更改为"CONVERT TO BINARY",以响应二进制响应.
但是我该怎么设置呢?
我不知道serverless.yml和AWS控制台GUI.

如果我成功设置了Content Handling => CONVERT TO BINARY,我可以解决响应二进制响应吗?

== 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)

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有