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.
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>",
}
}
}
Para saber mais sobre tipos de mídia binária, consulte Tipos de mídia binários para APIs REST no API Gateway.