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

Отправка многостраничного/смешанного контента с помощью расширения Postman Chrome

Я борюсь с созданием многостраничного/смешанного запроса POST с расширением Chrome Postman

Вот мой запрос на завиток, который хорошо работает

curl -H "Content-Type: multipart/mixed" 
-F "[email protected]_json.json; type=application/json "
-F "[email protected]; type=image/jpg" -X POST http://my/api/item -i -v

интересная часть ответа

Content-Length: 41557

Ожидайте: 100-continue

Content-Type: multipart/mixed; граница = ---------------------------- 8aaca457e117

  • дополнительный материал не очень хороший transfer.c: 1037: 0 0
  • HTTP 1.1 или более поздняя версия с постоянным подключением, поддержка конвейеризации

И когда я использую Postman enter image description here

Получаю такой ответ

{"message":"Could not parse multipart servlet request;
 nested exception is org.apache.commons.fileupload.FileUploadException: 
 the request was rejected because no multipart boundary was     
 found","type":"error","status":500,"requestId":"1861eloo6fpio"}

Что это - я хочу избавиться от этой ошибки. Если вам нужна дополнительная информация, пожалуйста, спросите:)

4b9b3361

Ответ 1

Я тоже столкнулся с этой проблемой. Краткий ответ: удалите заголовок Content-Type из вашего запроса Postman.

Долгая история заключается в том, что Content-Type для многостраничного запроса должен быть довольно особенным - он должен выглядеть примерно так:

multipart/form-data; boundary=----WebKitFormBoundaryzeZR8KqAYJyI2jPL

Проблема в том, что граница важна, и она должна точно соответствовать границе, используемой для разделения загружаемых файлов. Решение прост: не указывайте Content-Type! Когда вы загружаете файлы, Postman автоматически добавит выше указанный тип контента, за исключением того, что граница будет заполнена любым почтовым устройством или Chrome, использующим для разделения многостраничного контента.

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

Примечание. Мой ответ - это решение для тех, кому нужен ответ multipart/form-data. ОП искал решение multipart/mixed. В этом случае моего ответа не хватит. При этом кажется, что многие люди просто хотят решения multipart/form-data, поэтому я оставлю здесь свой ответ.

Ответ 2

Оставил этот комментарий на: https://github.com/postmanlabs/postman-app-support/issues/1104

Обновление ниндзя: Не уверен, поможет ли это кому-либо еще, но есть обходной путь для конкретного сценария, когда у вас есть несколько типов файлов/типов контента, загружаемых в одном многочастном запросе POST.

  1. Установите Content-Type заголовка в multipart/mixed.
  2. Выберите опцию form-data в Body.
  3. Конвертируйте все ваши элементы в файлы. Строковый контент должен стать текстовым файлом и т.д.
  4. Добавьте каждый файл, выбрав file, добавив имя ключа.

Этот подход не требует указания вручную каждого Content-Type или Content-Disposition. Хитрость заключалась в том, чтобы сериализовать весь соответствующий контент в постоянный тип файла. Вы можете игнорировать шаг "преобразовать его в файл", если он текстовый :) Надеюсь, это кому-нибудь поможет!