Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
要从 Amazon Lambda 代理集成返回二进制媒体,请对来自 Lambda 函数的响应进行 base64 编码。还必须配置 API 的二进制媒体类型。负载大小限制为 10 MB。
要使用 Web 浏览器调用具有此示例集成的 API,请将 API 的二进制媒体类型设置为 */*
。API Gateway 使用来自客户端的第一个 Accept
标头来确定响应是否应返回二进制媒体。要在无法控制 Accept
标头值(如浏览器中的请求)的顺序时返回二进制媒体,请将 API 的二进制媒体类型设置为 */*
(对于所有内容类型)。
以下 Lambda 函数示例可以从 Amazon S3 返回二进制图像或将文本返回到客户端。该函数的响应包括一个 Content-Type
标头,用于向客户端指示它返回的数据类型。函数有条件地设置其响应中的 isBase64Encoded
属性,具体取决于它返回的数据类型。
- Node.js
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"
const client = new S3Client({region: 'us-east-2
'});
export const handler = async (event) => {
var randomint = function(max) {
return Math.floor(Math.random() * max);
}
var number = randomint(2);
if (number == 1){
const input = {
"Bucket" : "bucket-name
",
"Key" : "image.png
"
}
try {
const command = new GetObjectCommand(input)
const response = await client.send(command);
var str = await response.Body.transformToByteArray();
} catch (err) {
console.error(err);
}
const base64body = Buffer.from(str).toString('base64');
return {
'headers': { "Content-Type": "image/png" },
'statusCode': 200,
'body': base64body,
'isBase64Encoded': true
}
} else {
return {
'headers': { "Content-Type": "text/html" },
'statusCode': 200,
'body': "<h1>This is text</h1>",
}
}
}
- Python
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>",
}
要了解有关二进制媒体类型的更多信息,请参阅 针对 API Gateway 中的 REST API 的二进制媒体类型。