Проблема с загрузкой файлов Multipart/Form-Data на AWS API Gateway – “Неверный заголовок content-type: отсутствует граница multipart”

Вопрос или проблема

Я работаю над приложением на Node.js, где создал новую конечную точку API (profile/upload) для обработки загрузок файлов с использованием multipart/form-data. Это прекрасно работает в моей локальной среде. Однако, когда я развернул API на AWS API Gateway, я начал получать ошибку, связанную с заголовком Content-Type.

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

Ошибка в CloudWatch:

“message”: “Недопустимый заголовок content-type: multipart отсутствует граница”

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

Шаги, которые я пробовал (согласно документации AWS и другим советам на форумах):

  1. Добавил заголовки Content-Type и Accept в разделы Method Request и Integration Request для API. Затем я заново развернул API.

Запрос метода

Запрос интеграции

Результат: По-прежнему получаю ту же ошибку в CloudWatch, и ответ API возвращает внутреннюю ошибку сервера.

ошибка postman

  1. Изменил настройки API для Бинарных медиа типов:
  • Пытался добавить multipart/form-data.
  • Также пытался добавить ‘/‘.

Результат: Оба варианта настройки вернули следующее:

{
“message”: “Внутренняя ошибка сервера”
}

В CloudWatch отображается следующая ошибка для журналов шлюза.

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

Дополнительно,
API работает нормально локально, и я отправляю файл с помощью multipart/form-data с фронтенда и Postman.
Ошибка, похоже, связана с отсутствующей границей в заголовке Content-Type, но я не совсем понимаю, почему это происходит.

Кто-нибудь сталкивался с аналогичной проблемой при обработке загрузок файлов multipart через AWS API Gateway? Есть какие-либо предложения, что я мог пропустить или как решить эту ошибку?

Ответ или решение

Проблема с загрузкой файлов через multipart/form-data в AWS API Gateway, выражающаяся в ошибке "Invalid content-type header: multipart missing boundary", может возникать по нескольким причинам. Давайте разберёмся с возможными шагами для устранения данной проблемы.

1. Проверка заголовка Content-Type

Убедитесь, что заголовок Content-Type правильно сформирован на клиентской стороне. Для заголовка multipart/form-data должен быть указан boundary, который разделяет части данных. Это может выглядеть примерно так:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

Если вы используете библиотеку для отправки данных (например, Axios или Fetch API в браузерах), убедитесь, что она автоматически добавляет этот заголовок. Если вы формируете заголовок вручную, убедитесь, что границы правильно указаны.

2. Конфигурация API Gateway

2.1. Binary Media Types

Если вы не добавили multipart/form-data в список бинарных типов медиа в настройках вашего API Gateway, это может вызвать данную ошибку. Убедитесь, что:

  • Откройте настройки API Gateway.
  • Перейдите в раздел "Binary Media Types".
  • Добавьте multipart/form-data и / (это позволит обработать все типы).

После добавления типов повторно разверните ваше API.

2.2. Метод запроса и интеграция

Проверьте, что в разделе "Method Request" и "Integration Request" правильно указаны заголовки Content-Type и Accept. Так как вы рассматриваете работу с бинарными данными, можно также настроить параметры на стороне интеграции для приема бинарных данных.

3. Настройки CORS

Иногда ошибка может возникать из-за неправильно настроенного CORS (Cross-Origin Resource Sharing). Убедитесь:

  • Включите CORS в настройках вашего API, если ваш клиентский код работает с другого домена.

4. Логирование

Используйте CloudWatch для более детального отслеживания запросов и ошибок:

  • Включите логирование для вашего API Gateway.
  • Анализируйте логи при отправке файлов, чтобы выявить проблемы в формате запросов или обработке на этапе интеграции.

5. Тестирование на Postman

При тестировании в Postman:

  • Убедитесь, что вы выбираете тип запроса POST и используете вкладку Body с выбранной опцией form-data.
  • Проверьте, правильно ли FormData формируется, включая поле для файла.

Заключение

Если после выполнения всех вышеуказанных шагов проблема всё ещё сохраняется, попробуйте выполнить дебаггинг с минимальным набором данных и без файлов для определения, в какой именно части происходит сбой обработки. Возможно, вы получите более детальную ошибку в логах CloudWatch.

Если у вас есть дальнейшие вопросы или необходима дополнительная помощь, не стесняйтесь задать их. Удачи в решении проблемы!

Оцените материал
Добавить комментарий

Капча загружается...