Rückgabe binärer Medien aus einer Lambda-Proxy-Integration in API Gateway - Amazon API Gateway

Rückgabe binärer Medien aus einer Lambda-Proxy-Integration in API Gateway

Zum Zurückgeben binärer Medien aus einer AWS Lambda-Proxy-Integration verwenden Sie für die Antwort Ihrer Lambda-Funktion base64-Codierung. Sie müssen auch die binären Medientypen Ihrer API konfigurieren. Die maximale Größe der Nutzlast ist 10 MB.

Anmerkung

Um einen Webbrowser zum Aufruf einer API mit dieser Beispielintegration zu verwenden, legen Sie die binären Medientypen Ihrer API auf fes */*. API Gateway verwendet den ersten Accept-Header von Clients, um zu bestimmen, ob eine Antwort binäre Medien zurückgeben soll. Um binäre Medien zurückzugeben, wenn Sie die Reihenfolge der Accept-Headerwerte nicht steuern können, z. B. Anforderungen von einem Browser, setzen Sie die binären Medientypen der API (für alle Inhaltstypen) auf */*.

Die folgende Beispiel-Lambda-Funktion kann ein binäres Bild von Amazon S3 oder Text an Clients zurückgeben. Die Antwort der Funktion enthält einen Content-Type-Header, der dem Client den Typ der zurückgegebenen Daten angibt. Die Funktion legt die isBase64Encoded-Eigenschaft bedingt in ihrer Antwort fest, abhängig von der Art der Daten, die sie zurückgibt.

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>", }

Weitere Informationen zu binären Medientypen finden Sie unter Binäre Medientypen für REST-APIs in API Gateway.