本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 API Gateway API 存取 Lambda 中的二進位檔案
下列 OpenAPI 範例示範如何 AWS Lambda 透過 API Gateway API 存取 中的二進位檔案。此 API 會公開用於下載及上傳指定影像檔的
GET /lambda?key=
{
file-name}
與
PUT /lambda?key=
{
file-name}
方法。
GET
方法會在「200 OK」回應中,將 Base64 編碼字串格式的影像檔當作 JSON 輸出的一部分傳回,後面接著所提供的映射範本。
PUT
方法接受原始二進位 Blob 作為輸入,並傳回「200 OK」回應與空的承載。
您建立 API 呼叫的 Lambda 函數,而該函數必須傳回具有
application/json
的
Content-Type
標頭的 base64 編碼字串。
存取 Lambda 中影像之範例 API 的 OpenAPI 檔案
下列 OpenAPI 檔案顯示一個範例 API,說明如何從 Lambda 下載影像檔,以及如何將影像檔上傳至 Lambda。
OpenAPI 3.0
"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"
OpenAPI 2.0
"swagger": "2.0",
"info":
{
"version": "2016-10-21T17:26:28Z",
"title": "ApiName"
"host": "abcdefghi.execute-api.us-east-1.amazonaws.com",
"basePath": "/v1",
"schemes": [
"https"
"paths":
{
"/lambda":
{
"get":
{
"produces": [
"application/json"
"parameters": [
"name": "key",
"in": "query",
"required": false,
"type": "string"
"responses":
{
"200":
{
"description": "200 response",
"schema":
{
"$ref": "#/definitions/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":
{
"produces": [
"application/json", "application/octet-stream"
"parameters": [
"name": "key",
"in": "query",
"required": false,
"type": "string"
"responses":
{
"200":
{
"description": "200 response",
"schema":
{
"$ref": "#/definitions/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"],
"definitions":
{
"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 編碼字串格式的影像檔 (image.jpg) 並格式化為 JSON 屬性:
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