Exibir mídia binária de uma integração de proxy do Lambda no API Gateway - Amazon API Gateway

Exibir mídia binária de uma integração de proxy do Lambda no API Gateway

Para retornar mídia binária de uma integração de proxy do AWS Lambda, codifique com base64 a resposta da sua função do Lambda. Também é necessário configurar os tipos de mídia binária da API. O tamanho máximo da carga é 10 MB.

nota

Para usar um navegador da Web para invocar uma API com este exemplo de integração, defina os tipos de mídia binária da API como */*. O API Gateway usa o primeiro cabeçalho Accept dos clientes para determinar se uma resposta deve retornar mídia binária. Para retornar mídia binária quando não for possível controlar a ordem dos valores de cabeçalho Accept, como solicitações de um navegador, defina os tipos de mídia binária da API como */* (para todos os tipos de conteúdo).

O exemplo a seguir da função do Lambda pode retornar uma imagem binária do Amazon S3 ou texto para clientes. A resposta da função inclui um cabeçalho Content-Type para indicar ao cliente o tipo de dados que ele retorna. A função define de modo condicional a propriedade isBase64Encoded em sua resposta, dependendo do tipo de dados que ela retorna.

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

Para saber mais sobre tipos de mídia binária, consulte Tipos de mídia binários para APIs REST no API Gateway.