Отправка многокомпонентного / смешанного контента с расширением 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.
- Установить заголовок
Content-Type
вmultipart/mixed
, - Выберите
form-data
вариант вBody
, - Конвертируйте все ваши элементы в файлы. Содержимое строки должно стать текстовым файлом и т. Д.
- Добавьте каждый файл, выбрав
file
, добавив имя ключа.
Этот подход не требует указания вручную Content-Type
или же Content-Disposition
, Хитрость заключалась в том, чтобы сериализовать весь соответствующий контент в постоянный тип файла. Вы можете игнорировать шаг "преобразовать его в файл", если это текст:) Надеюсь, это кому-нибудь поможет!