Я пытаюсь вернуть 1px gif из метода AWS API Gateway.
Поскольку двоичные данные теперь поддерживаются, я возвращаю изображение /gif, используя следующее сопоставление "Интеграция ответа":
$util.base64Decode("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
Однако, когда я смотрю на это в Chrome, я вижу возвращение следующего двоичного файла:
Вместо:
Может ли кто-нибудь помочь мне понять, почему это искажено и неправильной длины? Или что я могу сделать, чтобы вернуть правильный двоичный файл? Есть ли еще что-то, что я всегда мог бы вернуть 1px gif без использования функции base64Decode?
Большое спасибо заранее, это причиняет мне много боли!
РЕДАКТИРОВАТЬ
Это становится страннее. Похоже, проблема связана не с base64Decode, а с общей обработкой двоичного кода. Я добавил бэкэнд Lambda (ранее я использовал Firehose) после этого сообщения в блоге и этого вопроса о переполнении стека. Я установил изображения как binaryMediaType в соответствии с этой страницей документации.
Это позволило мне передать следующий пиксель изображения /bmp из Lambda через API шлюза, и он работает правильно:
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 });
};
Это, похоже, та же проблема, что и вопрос о переполнении стека, но я надеялся, что это будет исправлено с помощью двоичной поддержки Gateway API. К сожалению, image/bmp не работает для моего использования, поскольку он не может быть прозрачным...
В случае, если это помогает кому-то, это был хороший инструмент для преобразования base64 и hex.