Двоичные данные, полученные через шлюз API, искажены - PullRequest
0 голосов
/ 17 апреля 2020

Что случилось

При использовании API-шлюза для передачи двоичных данных в Lambda они искажаются.
ContentType заголовка HTTP-запроса устанавливается в multipart / formdata.

Часть искаженных двоичных данных показана ниже.

# Collect
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ 89 50 4e 47 0d 0a 1a 0a ┊ 00 00 00 0d 49 48 44 52 │×PNG__•_┊000_IHDR│
│00000010│ 00 00 02 00 00 00 02 00 ┊ 08 06 00 00 00 f4 78 d4 │00•000•0┊••000×x×│
│00000020│ fa 00 00 00 01 73 52 47 ┊ 42 00 ae ce 1c e9 00 00 │×000•sRG┊B0×ו×00│
│00000030│ 00 ea 65 58 49 66 4d 4d ┊ 00 2a 00 00 00 08 00 06 │0×eXIfMM┊0*000•0•│
│00000040│ 01 12 00 03 00 00 00 01 ┊ 00 01 00 00 01 1a 00 05 │••0•000•┊0•00••0•│
│00000050│ 00 00 00 01 00 00 00 56 ┊ 01 1b 00 05 00 00 00 01 │000•000V┊••0•000•│
│00000060│ 00 00 00 5e 01 31 00 02 ┊ 00 00 00 26 00 00 00 66 │000^•10•┊000&000f│
│00000070│ 01 32 00 02 00 00 00 14 ┊ 00 00 00 8c 87 69 00 04 │•20•000•┊000××i0•│
│00000080│ 00 00 00 01 00 00 00 a0 ┊ 00 00 00 00 00 00 00 48 │000•000×┊0000000H│


# Garbled
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ ef bf bd 50 4e 47 0d 0a ┊ 1a 0a 00 00 00 0d 49 48 │×××PNG__┊•_000_IH│
│00000010│ 44 52 00 00 02 00 00 00 ┊ 02 00 08 06 00 00 00 ef │DR00•000┊•0••000×│
│00000020│ bf bd 78 ef bf bd ef bf ┊ bd 00 00 00 01 73 52 47 │××x×××××┊×000•sRG│
│00000030│ 42 00 ef bf bd ef bf bd ┊ 1c ef bf bd 00 00 00 ef │B0××××××┊•×××000×│
│00000040│ bf bd 65 58 49 66 4d 4d ┊ 00 2a 00 00 00 08 00 06 │××eXIfMM┊0*000•0•│
│00000050│ 01 12 00 03 00 00 00 01 ┊ 00 01 00 00 01 1a 00 05 │••0•000•┊0•00••0•│
│00000060│ 00 00 00 01 00 00 00 56 ┊ 01 1b 00 05 00 00 00 01 │000•000V┊••0•000•│
│00000070│ 00 00 00 5e 01 31 00 02 ┊ 00 00 00 26 00 00 00 66 │000^•10•┊000&000f│
│00000080│ 01 32 00 02 00 00 00 14 ┊ 00 00 00 ef bf bd ef bf │•20•000•┊000×××××│

Как мне это исправить?

environment

curl для отправки HTTP-запрос к конечной точке.
Используются следующие команды.
curl -H "Content-Type: multipart/form-data" -F file="@my_file.png" -X POST <url to the endpoint>

Тело HTTP-запроса передается в Lambda от шлюза API.
Бинарные типы носителей в API Набор шлюзов multipart/form data и image/png.

Лямбда-функции присваивается тело, закодированное в Base64, поэтому она декодирует его в Node.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...