Restituisci supporti binari da un'integrazione proxy Lambda in Gateway API - Amazon API Gateway

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Restituisci supporti binari da un'integrazione proxy Lambda in Gateway API

Per restituire un supporto binario da un'integrazione proxy AWS Lambda, codificare in base64 la risposta dalla funzione Lambda. È inoltre necessario configurare i tipi API di file multimediali binari. Il limite della dimensione del payload è 10 MB.

Nota

Per utilizzare un browser Web per richiamare un'integrazione API con questo esempio, imposta i tipi API di file multimediali binari su*/*. APIGateway utilizza la prima Accept intestazione dei client per determinare se una risposta deve restituire un supporto binario. Per restituire file multimediali binari quando non puoi controllare l'ordine dei valori di Accept intestazione, ad esempio le richieste provenienti da un browser, imposta i tuoi tipi API di file multimediali binari su */* (per tutti i tipi di contenuto).

Il seguente esempio di funzione Lambda può restituire ai client un'immagine binaria da Amazon S3 o del testo. La risposta della funzione include un'intestazione Content-Type per indicare al client il tipo di dati che restituisce. La funzione imposta in modo condizionale la proprietà isBase64Encoded nella risposta, a seconda del tipo di dati che restituisce.

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

Per ulteriori informazioni sui tipi di supporti binari, consulta Tipi di supporti binari per REST APIs in API Gateway.