我想使用 AWS Lambda 代理集成通过我的 Amazon API Gateway REST API 或 HTTP API 返回二进制数据。
解决方案
**注意:**API 网关 HTTP API 自动处理二进制数据。要使 API 网关 REST API 处理二进制数据,后端 Lambda 函数必须使用 Lambda 函数的输出格式进行代理集成。
使用 Lambda 代理集成通过 API 网关 REST API 返回二进制数据
完成以下步骤:
- 打开 Lambda 控制台。
- 创建新的 Lambda 函数。
**注意:**有关 Python 3 Lambda 函数的示例,请参阅从 API Gateway 中的 Lambda 代理集成返回二进制媒体。
- 打开 API Gateway 控制台。
- 创建新的 REST API。
- 要为新的 API 创建 GET 方法,请执行以下操作:
在 Methods(方法)面板中,选择 Create method(创建方法)。
对于 Method type(方法类型),选择 GET。
在 / - GET - Setup 部分中,对于 Integration type(集成类型),选择 Lambda function(Lambda 函数)。激活 Use Lambda proxy integration(使用 Lambda 代理集成)。
对于 Lambda function(Lambda 函数),请选择您在其中创建 Lambda 函数的 AWS 区域。然后,输入新 Lambda 函数的名称。
选择 Create method(创建方法)。
- 对于 API,选择 API settings(API 设置)。
- 在 Binary media types(二进制媒体类型)下,选择 Manage media types(管理媒体类型),然后选择 Add binary media type(添加二进制媒体类型)。
- 添加您的文件格式,例如 image/png 或 application/pdf。
- 选择 Save changes(保存更改)。
- 将您的 API 部署到新阶段。
**注意:**有关如何设置新阶段的信息,请参阅在 API Gateway 中为 REST API 设置阶段。
有关如何调用 API 的信息,请参阅在 API Gateway 中调用 REST API。
**注意:**对于二进制数据,必须在 Lambda 函数的输出中将 ;isBase64Encoded 属性设置为 true。body 属性还必须包含 base64 编码的二进制媒体。有关详细信息,请参阅 API Gateway 中 REST API 的二进制媒体类型。
使用 Postman 或 cURL 调用您的 REST API 来返回二进制数据
**重要事项:**对于 Postman 或 cURL,在 API 请求中包含 Accept 标头。Accept 标头值必须与您使用的文件格式相匹配,例如 image/png 或 application/pdf。
运行以下 curl 命令:
curl 'https://exampleRestApiId.execute-api.exampleRegion.amazonaws.com/exampleStageName/' -H 'Accept: image/png'
**注意:**在前面的命令中,将 exampleRestApiId 替换为您的 API 的标识符,将 exampleRegion 替换为您的 API 所在的区域。另外,将 exampleStageName 替换为您的 API 的阶段名称,将 image/png 替换为您的图像文件类型。
使用 Web 浏览器调用 REST API 以返回二进制数据
Web 浏览器会自动发送带有多个值的 Accept 标头。默认情况下,第一个值始终为 html/text。由于 API Gateway 仅接受第一个值,因此您必须将 text/html 作为二进制媒体类型添加到 API 中。否则,您会收到以下错误消息:
“The image "https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/" cannot be displayed because it contains errors.”(图像“https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/”无法显示,因为它包含错误。)
要将 text/html 作为二进制媒体类型添加到 REST API,请完成以下步骤:
- 打开 API Gateway 控制台。
- 选择您的 API。
- 在导航窗格中,选择 API settings(API 设置)。
- 在 Binary media types(二进制媒体类型)下,选择 Manage media types(管理媒体类型),然后选择 Add binary media type(添加二进制媒体类型)。
- 输入 text/html。
- 选择 Save changes(保存更改)。
- 部署 API。
有关详细信息,请参阅 API Gateway 中的内容类型转换。