AWS - загрузка файла CSV с использованием API Gateway с использованием multipart / form-data - PullRequest
0 голосов
/ 03 марта 2020

У меня есть сценарий использования, когда мне нужно загрузить CSV-файл с помощью AngularJS App через AWS API Gateway, в мое внутреннее приложение (работает в Elasti c Beanstalk - Django Python REST App).

  1. Шлюз API интегрирован с AWS Cognito.
  2. Бэкэнд-приложение ожидает данные формы с CSV-загрузками.

Я создал API-шлюз с ресурсом типа / main_resource / upload_csv с методом POST.

В настоящее время я тестирую это с примером Javascript приложения, которое создает AJAX вызов URL-адреса шлюза API. Ниже приведен AJAX вызов

$.ajax({ method: 'POST', url: 'https://47483nvh39.execute-api.ap-south-1.amazonaws.com/mystage/main_resource/upload_csv', headers: { Authorization: authToken, "Accept": "*/*", "Content-Type": "multipart/form-data" }, contentType: 'multipart/form-data', data: formData, dataType: "json", processData: false, success: completeRequest, error: function ajaxError(jqXHR, textStatus, errorThrown) { console.error('Error: ', textStatus, ', Details: ', errorThrown); console.error('Response: ', jqXHR.responseText); console.log("Status: " + jqXHR.status); if (jqXHR.status == 401 || jqXHR.status == 403) { //redirectToLogin(); } else { alert('An error occured:\n' + jqXHR.responseText); } } });

Важные настройки выполняются в методе POST ресурса API Gateway

  1. Шлюз API -> Настройки -> Двоичный носитель Типы - добавлены 'multipart / form-data
  2. Добавлены заголовки в "Запрос метода" - "Тип контента" и "Принять"
  3. Добавлены заголовки в "Запрос интеграции" - "Тип контента" "and" Accept "
  4. Добавлен тип содержимого в тело запроса" Method Request "как" multipart / form-data "
  5. В" Запрос на интеграцию "добавлен multipart / form-data в" Mapping Templates " «

После выполнения всех этих настроек я получаю ответ 500« Внутренняя ошибка сервера ». Я просмотрел журналы приложения Django и обнаружил, что внутренний URL-адрес не доступен.

Любая помощь, связанная с этим, приветствуется

Спасибо

Avina sh Дешмух.

1 Ответ

0 голосов
/ 05 марта 2020

Я наконец-то смог выполнить запрос POST с multipart/form-data для загрузки CSV.

Ниже приведены необходимые шаги.

  1. Добавление двоичного типа носителя в API Gateway -> Settings -> Binary Media Types 'multipart / form-data'
  2. Добавьте заголовки "Content-Type" и "Accept" в "Запрос метода".
  3. Добавить От «Content-Type» до «Method Request» -> Тело запроса как «multipart / form-data».

  4. В «Запросе на интеграцию» установите флажок «Использовать прокси» Интеграция ".

При вызове Ajax удалите" Content-Type "из списка заголовков. Замечено, что заголовок «Content-Type» отправляется с полезной нагрузкой «Тело запроса». Таким образом, модифицированный вызов Ajax может выглядеть примерно так:

$.ajax({ method: 'POST', url: 'https://47483nvh39.execute-api.ap-south-1.amazonaws.com/mystage/main_resource/upload_csv', headers: { Authorization: authToken, "Accept": "*/*" }, contentType: 'multipart/form-data', data: formData, dataType: "json", processData: false, success: completeRequest, error: function ajaxError(jqXHR, textStatus, errorThrown) { console.error('Error: ', textStatus, ', Details: ', errorThrown); console.error('Response: ', jqXHR.responseText); console.log("Status: " + jqXHR.status); if (jqXHR.status == 401 || jqXHR.status == 403) { //redirectToLogin(); } else { alert('An error occured:\n' + jqXHR.responseText); } } });

Надеюсь, это поможет тем, кто сталкивается с проблемами во время интеграции.

...