Aws lambda 弄乱了我的编码

Aws lambda messes up my encoding

我正在使用

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 lambda 上创建图像大小调整服务...我解决了第一篇文章遇到的内容类型问题,但编码似乎是死胡同...任何帮助将不胜感激!

ruby

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;

api 网关

$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;

是的...看起来这是一个已知问题https://forums.aws.amazon.com/thread.jspa?messageID=668306&#668306

好吧,这是超级旧线程,但由于问题仍未解决,并且对 API GW 的二进制支持的记录很糟糕,我认为有人可能会发现我发现有用的解决方法:

我相信,二进制数据作为 UTF-8 字符串在 API GW 的某处传递。如果您只需要 return 一个跟踪像素(而不是例如生成的图像)​​,那么您可以通过使用其二进制数据中没有问题字节的图像来避免编码混乱的问题。

例如,最短的跟踪像素(26字节长的GIF)中间有一个十六进制表示为0xFF的字节。这将破坏 API GW。但是如果你在十六进制编辑器中编辑这张图片并将字节替换为 0x00,你会得到一些仍然是有效图像的东西(甚至微软浏览器也不会抱怨它),但仍然可以通过 API GW.

让您的 "Body Mapping" 模板看起来像这样:

$util.base64Decode("R0lGODlhAQABAAAAACwAAAAAAQABAAACADs=")