2015-10-19 4 views
1

Я используюAws лямбда портит мою кодировку

https://clifff.com/2015/10/01/2015-failed-experiments-with-aws-lambda/ + https://www.twilio.com/blog/2015/09/build-your-own-ivr-with-aws-lambda-amazon-api-gateway-and-twilio.html

создать изображение изменения размера сервис на AWS лямбда ... Я решил проблему типа содержимого первой статьи застрял на, но кодировка кажется тупиком ... любая помощь будет принята с благодарностью!

рубинового

Base64.decode64("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7") 

-> изображение работы

GIF89a\u0001\u0000\u0001\u0000\x80\u0000\u0000\u0000\u0000\u0000\xFF\xFF\xFF!\xF9\u0004\u0001\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0001D\u0000; 

апи шлюз с

$util.base64Decode("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7") 

-> разбитого изображения

GIF89a\u0001\u0000\u0001\u0000�\u0000\u0000\u0000\u0000\u0000���!�\u0004\u0001\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0001D\u0000; 
+0

Использование картины не очень хорошо подходит для комбинации API шлюза и лямбда. API Gateway - это исключительно прокси-сервер или конечная точка JSON/XML REST. Передача бинарных данных через него - это взлом. Вы должны хранить свои двоичные данные непосредственно на S3, а затем запускать функцию Lambda через уведомления или через шлюз API. Найдите другие вопросы здесь, чтобы узнать больше об этом, на него ответили несколько раз. – kixorz

+0

Я не могу хранить в s3, поскольку это должно быть сгенерированное изображение. – grosser

+0

Я понимаю. Вам нужно сохранить созданный двоичный контент в S3 и вернуть 301 перенаправление на URL-адрес объекта S3. Вы не сможете напрямую возвращать двоичный контент из Lambda через API Gateway. – kixorz

ответ

2

ОК, это супер старая нить, но так как этот вопрос еще не решен, и бинарная поддержка API GW является жалким документирован, я подумал, что кто-то может найти обходное решение, которое я нашел полезным:

Я считаю, что двоичные данные передаются как строки UTF-8 где-то внутри API GW. Если вам нужно вернуть пиксель отслеживания (а не, например, сгенерированное изображение), то вы можете избежать проблемы с испорченной кодировкой, используя изображение, которое не имеет проблемных байтов в своих двоичных данных.

Например, самый короткий пиксель отслеживания (26-байтовый длинный GIF) имеет байт с шестнадцатеричным представлением 0xFF в середине. Это нарушит API GW. Но если вы отредактируете эту картинку в шестнадцатеричном редакторе и замените байт на 0x00, вы получите то, что по-прежнему является действительным изображением (и EVEN браузеры Microsoft не жалуются на это), но все равно могут обрабатываться API GW.

Просто сделайте ваш «Mapping Body» шаблон выглядеть следующим образом:

$util.base64Decode("R0lGODlhAQABAAAAACwAAAAAAQABAAACADs=")