Geben Sie binäre Medien aus einer Lambda-Proxyintegration in API Gateway zurück - APIAmazon-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.

Geben Sie binäre Medien aus einer Lambda-Proxyintegration in API Gateway zurück

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 Ihre API binären Medientypen konfigurieren. Die maximale Größe der Nutzlast ist 10 MB.

Anmerkung

Um einen Webbrowser zum Aufrufen einer Integration API mit diesem Beispiel zu verwenden, setzen Sie Ihre API binären Medientypen auf*/*. APIGateway 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 Header-Werte nicht kontrollieren können, wie z. B. Anfragen von einem Browser, setzen Sie Ihre API binären Medientypen auf */* (für alle Inhaltstypen).

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.