从 Lambda 代理集成返回二进制媒体 - Amazon API Gateway
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

从 Lambda 代理集成返回二进制媒体

要从 Amazon Lambda 代理集成返回二进制媒体,请对来自 Lambda 函数的响应进行 base64 编码。还必须配置 API 的二进制媒体类型

注意

要使用 Web 浏览器调用具有此示例集成的 API,请将 API 的二进制媒体类型设置为 */*。API Gateway 使用来自客户端的第一个 Accept 标头来确定响应是否应返回二进制媒体。要在无法控制 Accept 标头值(如浏览器中的请求)的顺序时返回二进制媒体,请将 API 的二进制媒体类型设置为 */*(对于所有内容类型)。

以下示例 Python 3 Lambda 函数可以从 Amazon S3 返回二进制图像或将文本返回给客户端。函数的响应包括一个 Content-Type 标头,用于向客户端指示它返回的数据类型。函数有条件地设置其响应中的 isBase64Encoded 属性,具体取决于它返回的数据类型。

import base64 import boto3 import json import random s3 = boto3.client('s3') def lambda_handler(event, context): number = random.randint(0,1) if number == 1: response = s3.get_object( Bucket='bucket-name', Key='image.png', ) image = response['Body'].read() return { 'headers': { "Content-Type": "image/png" }, 'statusCode': 200, 'body': base64.b64encode(image).decode('utf-8'), 'isBase64Encoded': True } else: return { 'headers': { "Content-type": "text/html" }, 'statusCode': 200, 'body': "<h1>This is text</h1>", }

要了解有关二进制媒体类型的更多信息,请参阅 使用 REST API 的二进制媒体类型