Отправка многокомпонентного / смешанного контента с расширением Postman Chrome

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

Вот мой запрос curl, что работает хорошо

curl -H "Content-Type: multipart/mixed" 
-F "metadata=@simple_json.json; type=application/json "
-F "content=@1.jpg; type=image/jpg" -X POST http://my/api/item -i -v

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

Длина содержимого: 41557

Ожидайте: 100-продолжение

Тип контента: составной / смешанный; граница =----------------------------8aaca457e117

  • дополнительные вещи не в порядке передачи. C: 1037:00
  • HTTP 1.1 или новее с постоянным соединением, поддерживается конвейерная обработка

И когда я использую Почтальон

Я получаю такой ответ

{"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"}

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

1 ответ

Решение

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

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

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

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

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

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

Оставил этот комментарий на: 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, Хитрость заключалась в том, чтобы сериализовать весь соответствующий контент в постоянный тип файла. Вы можете игнорировать шаг "преобразовать его в файл", если это текст:) Надеюсь, это кому-нибудь поможет!

Другие вопросы по тегам