以下 OpenAPI 示例展示了如何通过 API Gateway API 访问 AWS Lambda 中的二进制文件。此 API 公开了用于下载和上传指定图像文件的 GET /lambda?key={file-name}
和 PUT /lambda?key={file-name}
方法。GET
方法按照所提供的映射模板,在一个 200 OK 响应中返回 Base64 编码字符串形式的图像文件作为 JSON 输出的一部分。PUT
方法将原始二进制 blob 作为输入,并返回一个负载为空的 200 OK 响应。
您创建 API 调用的 Lambda 函数,该函数必须返回 Content-Type
标头为 application/json
的 base64 编码字符串。
用于访问 Lambda 中图像的示例 API 的 OpenAPI 文件
以下 OpenAPI 文件显示了一个 API 示例,阐明了如何从 Lambda 下载图像文件以及如何将图像文件上传到 Lambda。
{ "openapi": "3.0.0", "info": { "version": "2016-10-21T17:26:28Z", "title": "ApiName" }, "paths": { "/lambda": { "get": { "parameters": [ { "name": "key", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Empty" } } } }, "500": { "description": "500 response" } }, "x-amazon-apigateway-integration": { "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations", "type": "AWS", "credentials": "arn:aws:iam::123456789012:role/Lambda", "httpMethod": "POST", "requestTemplates": { "application/json": "{\n \"imageKey\": \"$input.params('key')\"\n}" }, "responses": { "default": { "statusCode": "500" }, "2\\d{2}": { "statusCode": "200", "responseTemplates": { "application/json": "{\n \"image\": \"$input.body\"\n}" } } } } }, "put": { "parameters": [ { "name": "key", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Empty" } }, "application/octet-stream": { "schema": { "$ref": "#/components/schemas/Empty" } } } }, "500": { "description": "500 response" } }, "x-amazon-apigateway-integration": { "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations", "type": "AWS", "credentials": "arn:aws:iam::123456789012:role/Lambda", "httpMethod": "POST", "contentHandling": "CONVERT_TO_TEXT", "requestTemplates": { "application/json": "{\n \"imageKey\": \"$input.params('key')\", \"image\": \"$input.body\"\n}" }, "responses": { "default": { "statusCode": "500" }, "2\\d{2}": { "statusCode": "200" } } } } } }, "x-amazon-apigateway-binary-media-types": [ "application/octet-stream", "image/jpeg" ], "servers": [ { "url": "https://abcdefghi.execute-api.us-east-1.amazonaws.com/{basePath}", "variables": { "basePath": { "default": "/v1" } } } ], "components": { "schemas": { "Empty": { "type": "object", "title": "Empty Schema" } } } }
从 Lambda 下载图像
从 Lambda 下载二进制 blob 形式的图像文件 (image.jpg
):
GET /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/octet-stream
成功响应如下所示:
200 OK HTTP/1.1 [raw bytes]
从 Lambda 下载 Base64 编码字符串(格式化为 JSON 属性)形式的图像文件 (image.jpg
):
GET /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json
成功响应如下所示:
200 OK HTTP/1.1 { "image": "W3JhdyBieXRlc10=" }
将图像上传到 Lambda
将二进制 blob 形式的图像文件 (image.jpg
) 上传到 Lambda:
PUT /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/octet-stream Accept: application/json [raw bytes]
成功响应如下所示:
200 OK
将 Base64 编码字符串形式的图像文件 (image.jpg
) 上传到 Lambda:
PUT /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json W3JhdyBieXRlc10=
成功响应如下所示:
200 OK