2015-10-19 51 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") 

API網關 - >斷圖像

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網關和Lambda的組合。 API網關僅限於代理或JSON/XML REST端點。通過它傳遞二進制有效載荷是一種破解。您應該直接將二進制數據存儲到S3,然後通過通知或API網關觸發Lambda函數。在這裏搜索其他問題以獲得更多關於它的信息,它已被多次解答。 – kixorz

+0

我無法存儲在s3中,因爲這應該是生成的圖像。 – grosser

+0

我明白了。您需要將生成的二進制內容存儲在S3中,並將301重定向到S3對象URL。您將無法直接通過API網關從Lambda返回二進制內容。 – kixorz

回答

2

OK,這是超級老線,但由於這個問題仍然沒有得到解決,而GW是慘敗證明了API的二進制數據支持,我認爲有人可能找到我發現有用的解決方法:

我相信,二進制數據作爲UTF-8字符串在API GW內部傳遞。如果您只需要返回一個跟蹤像素(而不是生成的圖像)​​,那麼可以通過使用二進制數據中沒有問題字節的圖像來避免編碼混亂的問題。

例如,最短的跟蹤像素(26字節長的GIF)在中間具有十六進制表示0xFF的字節。這將打破API GW。但是,如果你在十六進制編輯器中編輯這張圖片,並用0x00代替字節,你會得到一些仍然是有效圖像的東西(甚至微軟瀏覽器也不會抱怨),但仍可以通過API GW進行處理。

只是讓你「身映射」模板是這樣的:

$util.base64Decode("R0lGODlhAQABAAAAACwAAAAAAQABAAACADs=")