Подтвердить что ты не робот

Возврат изображений через AWS API Gateway

Я пытаюсь использовать AWS API Gateway в качестве прокси-сервера перед сервисом изображения. Я могу получить изображение, но оно отображается в виде большого фрагмента ASCII, потому что Content-Type получает значение "application/json".

Есть ли способ сообщить шлюзу НЕ изменять исходный Content-Type вообще?

Я просто хочу, чтобы "image/jpeg", "image/png" и т.д. проходили.

4b9b3361

Ответ 1

Я пытался отформатировать строку, которая будет возвращена без кавычек, и обнаружила функциональность Integration Response. Я не пробовал это исправление самостоятельно, но что-то в этом направлении должно работать:

  • Перейдите на страницу Выполнение метода вашего ресурса,
  • нажмите "Интеграционный ответ",
  • expand Состояние ответа на вызов 200,
  • expand Шаблоны сопоставления,
  • нажмите "application/json",
  • щелкните карандашом рядом с Output Passthrough,
  • изменить "application/json" на "image/png"

Надеюсь, что это сработает!

Ответ 2

Я заранее извиняюсь за то, что дал ответ, который напрямую не отвечает на вопрос, и вместо этого предлагает вам принять другой подход... но основываясь на вопросе и комментариях и моем собственном опыте с тем, что я считаю похожее приложение, похоже, вы можете использовать неправильный инструмент для проблемы или, по крайней мере, инструмент, который не является оптимальным выбором в экосистеме AWS.

Если ваша служба изображений была запущена внутри Amazon Lambda, необходимость в API Gateway была бы более очевидной. Если этого нет, я этого не вижу.

Amazon CloudFront предоставляет выборку контента с внутреннего сервера, кэширование контента (в более чем 50 "крайних" местах по всему миру), бесплатно для хранения кэшированного контента, и вы можете настроить до 100 отдельных имен хостов, указывающих на один дистрибутив Cloudfront, в дополнение к по умолчанию xxxxxxxx.cloudfront.net имя хоста. Он также поддерживает SSL. Это похоже на то, что вы пытаетесь сделать, а затем некоторые.

Я использую его, довольно успешно, для точно описанного вами сценария: "прокси-сервер перед сервисом изображения". Точно, что мой сервис изображений и служба имиджей могут быть разными (мой - это resizer, который может искать исходный URL-адрес отсутствующего/никогда не запрашиваемого изображения, выборки и изменения размера), но в корне кажется, что мы выполняем аналогичную цель.

Любопытно, что структура ценообразования CloudFront в некоторых регионах (например, us-east-1 и us-west-2) такова, что она не только экономична, но на самом деле использование CloudFront может быть почти на $0.005 дешевле, чем нет используя его на гигабайт.

В моем случае, помимо службы обратного изображения, у меня также есть ведро S3 с одним файлом в нем, прикрепленным к одному пути в дистрибутиве CloudFront (как второе "обычное происхождение" ), для единственная цель обслуживания /robots.txt, чтобы контролировать прямой доступ к моим изображениям с помощью хорошо выполненных сканеров. Это позволяет управлять файлом robots.txt отдельно от службы изображения.

Если это, похоже, не касается ваших потребностей, не стесняйтесь комментировать, и я уточню или отозму этот ответ.

Ответ 3

@kjsc: мы наконец выяснили, как заставить это работать над альтернативным вопросом с данными, закодированными в base64, которые могут оказаться полезными в вашем решении:

API-интерфейс API AWS base64Decode создает искаженный двоичный файл?

Чтобы ответить на ваш вопрос, чтобы получить Content-Type в виде жестко заданного значения, сначала перейдите на экран ответа метода и добавьте заголовок Content-Type и любой тип контента, который вы хотите.

ответ метода шлюза api

Затем вы перейдете на экран "Ответ на интеграцию" и установите для типа содержимого требуемое значение (рисунок/png в этом примере). Wrap 'image/png' в одинарных кавычках.

введите описание изображения здесь