2016-05-17 2 views
1

У меня есть требование вернуть PNG из Amazon Lambda Java Function в API Amazon Rest API. Я построил функцию с прототипом функции, как это:Функция Java Amazon Lambda, возвращающая png на шлюз API

public static void generatePng(InputStream request, OutputStream response, Context context) 

Запрос InputStream детализирует информацию, которая должна быть записана в образ. Реакция OutputStream - это то, что отправлено назад и является png-изображением. Я проверил код и знаю, что изображение, закодированное в выходном потоке, корректно, так как мой тест записывает это в файл, который я вижу в редакторе изображений.

Проблема, которая возникает у меня, связана с проводкой ответа функции Лямбды на шлюз API. В документах говорится исключительно о строковом ответе, но моя полезная нагрузка для ответа - это данные двоичного изображения.

В Интеграционном ответ Лямбда я попытался добавить отображения заголовка:

Content-Length integration.response.header.Content-Length
Content-Type integration.response.header.Content-Type

и картирование тела: content-type: image/png с шаблоном $ input.body

Я также добавил модель ответа image/png в разделе «Ответ на метод».

На тестирование API, ответ на вызов API не показывает изображение, хотя, а строка дамп изображения, начиная с правильного Png заголовка:

например: Response Body

?PNG 


IHDR? 
??~LIDATx? ...  

заголовки ответа сделать шоу: { «Content-Type»: «изображение/PNG»}

кто-нибудь знает, как настроить Amazon шлюз API принимать изображения в качестве выходного сигнала вызова лямбда-функции и вернуть его обратно вызывающему?

+2

В настоящее время API Gateway не поддерживает двоичные данные: https://forums.aws.amazon.com/thread.jspa?threadID=195218 –

+0

В конце концов я Base64 закодировал изображение и ответил с помощью полезной нагрузки JSon PNG в качестве кодированного изображения base64. – theINtoy

+0

То, что вы также можете сделать, - это загрузить сгенерированный PNG на S3 и вернуть ваш lambda 302 перенаправление на изображение через API-шлюз. Решил подобную проблему. – Theodor

ответ

1

API Gateway не поддерживает двоичные данные - https://forums.aws.amazon.com/search.jspa?objID=f199&q=binary&x=0&y=0.

Вы можете использовать функцию кодирования/декодирования base64 в шаблоне сопоставления. Link

+0

API Gateway недавно добавил поддержку двоичных данных, не нашел много информации в Интернете, чтобы заставить его работать. – DBrown2207

Смежные вопросы