如何设置 API Gateway API 以使用 Lambda 代理集成来处理二进制数据?

上次更新时间:2021 年 3 月 23 日

我想使用 AWS Lambda 代理集成,通过 Amazon API Gateway REST API(或 HTTP API)返回二进制数据。该如何进行设置?

解决方法

注意:API Gateway HTTP API 会自动处理二进制数据。要使 API Gateway REST API 处理二进制数据,后端 Lambda 函数必须使用正确的用于代理集成的 Lambda 函数的输出格式

使用 Lambda 代理集成通过 API Gateway REST API 返回二进制数据

1.    在 Lambda 控制台创建一个新的 Lambda 函数
注意:有关 Python 3 Lambda 函数的示例,请参阅从 Lambda 代理集成返回二进制媒体

2.    在 API Gateway控制台创建一个新的 REST API

3.    执行以下操作,为此新 API 创建一个 GET 方法:
Resources(资源)窗格中,选择 Actions(操作)。
选择 Create Method(创建方法)。然后选择 GET
对于 / - GET - Setup 部分中的 Integration type(集成类型),选择 Lambda Function(Lambda 函数)。
选中 Use Lambda Proxy integration(使用 Lambda 代理集成)复选框。
对于 Lambda Region(Lambda 区域),选择您在其中创建 Lambda 函数的区域。
对于 Lambda Function(Lambda 函数),输入您在第 1 步中创建的 Lambda 函数的名称。
选择 Save(保存)。
Add Permission to Lambda Function(向 Lambda 函数添加权限)对话框中,选择 OK(确定)。

4.    在左侧导航窗格中的 API 部分,选择 Settings(设置)。

5.    在 Binary Media Types(二进制媒体类型)下,选择 Add Binary Media Type(添加二进制媒体类型),然后添加 image/png(图像/png)或者您要使用的其他文件格式,例如 application/pdf(应用程序/pdf)。

6.    选择 Save Changes(保存更改)。

7.    将您的 API 部署到一个新的阶段。有关更多信息,请参阅使用 API Gateway 控制台设置阶段

您的 API 现在已准备好使用 Lambda 代理集成通过 API Gateway 返回二进制数据。有关如何调用 API 的信息,请参阅在 Amazon API Gateway 中调用 REST API

注意:处理二进制数据时,Lambda 函数输出中的 isBase64Encoded 属性必须设置为 true。 此外,body 属性也必须包含该 base64 编码的二进制媒体。有关更多信息,请参阅使用 REST API 的二进制媒体类型

使用 Postman 和 cURL 调用 REST API 以返回二进制数据

重要提示:如果您使用 Postman 或 cURL 调用 REST API 来返回二进制数据,请务必在 API 请求中包含 Accept 标头。Accept 标头值需要与您使用的文件格式一致。例如,image/png(图像/png)或 application/pdf(应用程序/pdf)。

有关如何使用 Postman 调用 REST API 的信息,请参阅使用 Postman 调用 REST API

有关 API Gateway 如何进行负载编码的信息,请参阅API Gateway 中的内容类型转换

调用 API Gateway REST API 以返回二进制数据的示例 cURL 命令

$ curl 'https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/' -H 'Accept: image/png'

注意:在运行示例 cURL 命令之前请替换以下变量:
对于 {restapi_id},输入 API 的标识符。
对于 {region},输入 API 所在的 AWS 区域。
对于 {stage_name},输入 API 的阶段名称。
对于 image/png,请务必输入您正在使用的实际图像文件类型。

使用 Web 浏览器调用 REST API 以返回二进制数据

如果您使用 Web 浏览器调用 REST API 来返回二进制数据,请务必将 text/html(文本/html)添加为 API 的二进制媒体类型。

注意:Web 浏览器会自动发送具有多个值的 Accept 标头。默认情况下,第一个值始终是 html/text(html/文本)。因为API Gateway 仅遵循第一个值,因此您必须将 text/html(文本/html)添加为 API 的二进制媒体类型。否则,您会收到以下错误消息:

"The image "https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/" cannot be displayed because it contains errors."

要将 text/html(文本/html)添加为 REST API 的二进制媒体类型,请执行以下操作:

1.    在 API Gateway 控制台中,选择您的 API。

2.    在左侧导航窗格中 API 部分的底部,选择 Settings(设置)。

3.    在 Binary Media Types(二进制媒体类型)下,选择 Add Binary Media Type(添加二进制媒体类型),然后添加 text/html()文本/html)。

4.    选择 Save Changes(保存更改)。

5.    部署您的 API

有关更多信息,请参阅API Gateway中的内容类型转换


这篇文章对您有帮助吗?


您是否需要账单或技术支持?