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

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Rückgabe binärer Medien von einer Lambda-Proxy-Integration

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.