gpt4 book ai didi

amazon-web-services - AWS API Gateway base64Decode产生乱码的二进制文件?

转载 作者:行者123 更新时间:2023-12-03 15:18:09 28 4
gpt4 key购买 nike

我正在尝试从AWS API Gateway方法返回1px gif。

由于现在支持二进制数据,因此我使用以下“集成响应”映射返回图像/ gif:

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

但是,当我在Chrome中查看此代码时,看到返回了以下二进制文件:

enter image description here

代替:

enter image description here

谁能帮助我理解为什么这是乱码且长度错误?或者我该怎么做才能返回正确的二进制文件?还有其他一些我不使用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 });

};

但是,以下表示image / png或image / 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之间转换。

最佳答案

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

但是现在他们应该增加了对二进制数据的支持,这应该是可能的:
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html

看起来这是我们需要的:“将IntegrationResponse资源的contentHandling属性设置为 CONVERT_TO_BINARY ,以将响应有效载荷从Base64编码的字符串转换为其二进制blob”。然后,我们不需要base64Decode()函数。

现在进行测试以查看是否可行。

编辑:我终于能够使它工作。您可以在此处查看二进制图像:
https://chtskiuz10.execute-api.us-east-1.amazonaws.com/prod/rest/image

这是我的Lambda函数,该函数以字符串形式返回base64编码的PNG:
https://gist.github.com/davemaple/73ce3c2c69d5310331395a0210069263

我更新了方法响应,如下所示:
api gateway binary method response

我更新了集成响应,以包括一个硬编码的image / png header :
api gateway binary integration response

最后一步很棘手:将contentHandling属性设置为“CONVERT_TO_BINARY”。我不知道如何在AWS控制台中进行操作。我必须使用CLI API来完成此任务:

aws apigateway update-integration-response \
--profile davemaple \
--rest-api-id chtskiuzxx \
--resource-id ki1lxx \
--http-method GET \
--status-code 200 \
--patch-operations '[{"op" : "replace", "path" : "/contentHandling", "value" : "CONVERT_TO_BINARY"}]'

我希望这有帮助。

关于amazon-web-services - AWS API Gateway base64Decode产生乱码的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429551/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com