AWS API Gateway: загрузка файла в двоичном формате - PullRequest
0 голосов
/ 22 марта 2019

Я хотел бы использовать API-шлюз для передачи двоичных полезных данных с локального Express.js-сервера , который отправляет ZIP-файлы в ответ на запросы GET.

Однако API-шлюз, похоже,интерпретировать полезную нагрузку как строку, потому что при тестировании метода я получаю следующую ошибку:

Выполнение не выполнено из-за ошибки конфигурации: Ответ на интеграцию сообщенной длины 35508489 превышает допустимый максимум в 10485760 байт.

Заголовки ответа моей конечной точки следующие:

Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0
Connection: keep-alive
Content-Disposition: attachment; filename="rrAIkB6D_v8Htun4hpBx9.zip"
Content-Length: 34173953
Content-Type: application/zip
Date: Fri, 22 Mar 2019 08:37:38 GMT
ETag: W/"2097401-169a0b780ff"
Last-Modified: Thu, 21 Mar 2019 14:46:14 GMT

Загрузка работает при непосредственном доступе к конечной точке.

Я что-то пропустил вконфигурация?

AWS API Gateway: Overview AWS API Gateway: Method Request AWS API Gateway: Integration Request AWS API Gateway: Method Response AWS API Gateway: Integration Response AWS API Gateway: Method Test AWS API Gateway: Settings

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Прежде всего, на некоторых рисунках я вижу ARN вашего API-шлюза, а это значит, что я могу позвонить, и вы заплатите за него.И если я буду часто называть это сценарием, ты заплатишь еще больше.В современном облачном мире это называется DOW-атака (отказ от кошелька).Быть осторожен!:)

И по самому вопросу, к сожалению, API Gateway имеет жесткий предел 10 МБ для полезной нагрузки.Поскольку это сложно, кажется, что оно не совсем подходит для вашего случая использования.(

1 голос
/ 23 марта 2019

10 МБ для полезной нагрузки - это жесткое ограничение, и оно применяется для всех полезных нагрузок независимо от двоичного или текстового содержимого.Это упомянуто в документации AWS .

Поскольку (a) файл, который вы пытаетесь передать, превышает 30 МБ, (b) вы не настроили слишком сложную логику обработки в конфигурации шлюза APIи (c) учитывая затраты на передачу данных и т. д., сможете ли вы проверить, можно ли запускать ваш экспресс-сервер с помощью Application Load Balancer?Кроме того, вы можете ввести кеширование (CloudFront), если ответ будет использоваться повторно для нескольких запросов.

Что касается вашего утверждения, «API-шлюз интерпретирует полезную нагрузку как строку». Можете ли вы подтвердить, что выпередать заголовок «Accept» со значением «application / zip» в HTTP-запросе к шлюзу API?

...