我想从AWS API网关方法返回1px gif。AWS网关API base64Decode产生乱码?
由于二进制数据现在支持,我用下面的“合并响应”映射返回图像/ GIF:
$util.base64Decode("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
然而,当我在Chrome看看这个,我看到了以下这些二进制返回:
相反的:
任何人都可以帮助我理解为什么这是乱码和错误的长度?或者我可以做什么来返回正确的二进制文件?有没有其他的我可以不使用base64Decode函数而返回这个1px gif?
非常感谢提前,这已经造成了我很多的痛苦!
编辑
这一个得到陌生人。看起来问题不在于base64Decode,而在于二进制的一般处理。我在this blog post和Stack Overflow question之后添加了Lambda后端(以前我使用的是Firehose)。根据此documentation page将图像设置为binaryMediaType。
这让我通过网关API通过从LAMBDA下面的图片/ BMP像素,并且它能够正常工作:
exports.handler = function(event, context) {
var imageHex = "\x42\x4d\x3c\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x06\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00";
context.done(null, { "body":imageHex });
};
但是表示图像/ PNG或图像/ GIF下面的图像得到乱码当穿过:
exports.handler = function(event, context) {
//var imageHex = "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\xff\xff\xff\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3b";
//var imageHex = "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\xff\xff\xff\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b";
var imageHex = "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b\x0a"
context.done(null, { "body":imageHex });
};
这似乎是相同的问题another Stack Overflow question,但我希望这将是固定与网关API二进制支持。不幸的是image/bmp不适用于我的用例,因为它不能透明...
如果它有帮助,this has been a good tool用于在base64和hex之间转换。
不响应头是什么样子的Chrome浏览器? –
谢谢,响应标题是: 'HTTP/1。1 200 OK Content-Type:image/gif Content-Length:52 Connection:keep-alive Date:Mon,02 Jan 2017 22:08:55 GMT x-amzn-RequestId:0d3f620c-d138-11e6- 941A-0f16afc9bdc4 X-AMZN-痕量-ID:根= 1-586acf77-93ce6c87faa62ee76758abf5 X-缓存:小姐从CloudFront的 途经:1.1 227087338674ca3d3d23a79539f2998b.cloudfront.net(CloudFront的) X-AMZ-CF-ID:9V1XUr1cPqjm7Bj2HOFfakLlFM5MWo_Ucuv9cdk35xsBz_xhcPvixQ = =' 和响应回来为: '数据:图像/ GIF; BASE64,R0lGODlhAQABAO +/vQAAAAAA77 + 977 + 977 + 9Ie +/vQQBAAAAACwAAAAAAQABAAACAUQAOw ==' – rjmurt
什么是你的API网关的后台?它是Lambda吗? –