Работа с двоичными файлами в API Gateway - это всегда сложная задача.Однако мне удалось заставить его работать.
Все, что вам нужно сделать, это сообщить API-шлюзу, что ваш ответ закодирован в base64.
Вот рабочее решение:
module.exports.hello = async (event, context) => {
const imgUrl = 'https://developer.salesforce.com/forums/profilephoto/729F00000005O41/T';
const image = await jimp.read(imgUrl);
const buffer = await image.getBufferAsync(jimp.MIME_JPEG);
return {
statusCode: 200,
headers: {
'content-type': 'image/jpeg'
},
body: buffer.toString('base64'),
isBase64Encoded: true
};
};
Реальная проблема, которую я здесь вижу, заключается в том, что Express управляет маршрутами для вас, поэтому я не думаю, что вы можете перехватить ответ API GW, чтобы добавить поле 'isBase64Encoded', поэтому яЯ боюсь, что вам придется разрешить управление этим API через API-шлюз вместо Express, чтобы заставить его работать должным образом.
Кроме того, Jimp предлагает метод getBufferAsync
, который возвращает обещание, так что вы можете простоawait
на нем, чтобы сделать код немного проще.
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ :
Я былвсе еще пытаясь заставить его работать с Express, поэтому я нашел это: https://github.com/awslabs/aws-serverless-express/issues/99#issuecomment-332169739
Я должен признать, что я не тестировал, но это может сработать, если вам действительно нужно, чтобы Express обрабатывал маршруты для вас.