Как я могу публиковать файлы и данные JSON вместе с Curl?

Я публиковал файл с помощью этой команды curl:

curl -i -F file=@./File.xlsm -F name=file -X POST http://example.com/new_file/

Теперь я хочу отправить некоторую информацию о файле (как JSON) вместе с файлом.

curl -i -H "Content-Type: application/json" -d '{"metadata": {"comment": "Submitting a new data set.", "current": false }, "sheet": 1, "row": 7 }' -F file=@./File.xlsm -F name=file http://example.com/new_file/

Curl очень раздражителен тем, что его используют совершенно неверным образом, и в этом случае он говорит: "Вы можете выбрать только один HTTP-запрос!" Хорошо, достаточно справедливо, так как мне получить вложение файла и эти переменные POST в один HTTP-запрос curl?

3 ответа

Я успешно разработал аналогичные конечные точки, которые принимают несколько файлов вместе с их метаданными в формате JSON.

curl -i -X POST -H "Content-Type: multipart/mixed" -F "blob=@/Users/username/Documents/bio.jpg" -F "metadata={\"edipi\":123456789,\"firstName\":\"John\",\"lastName\":\"Smith\",\"email\":\"john.smith@gmail.com\"};type=application/json" http://localhost:8080/api/v1/user/

Обратите внимание на добавление ;type=application/json в конце части запроса метаданных. При загрузке нескольких файлов разных типов вы можете определить тип mime в конце значения -F.

Я подтвердил, что это работает для Spring MVC 4.3.7 с использованием @RequestPart. Ключ в этом случае заключается в том, чтобы не указывать значение потребляемых ресурсов в аннотации @RequestMapping.

Вы можете просто добавить другое поле формы:

curl -X POST http://someurl/someresource -F upload=@/path/to/some/file -F data="{\"test\":\"test\"}"

Примечание: из-за типа контента это на самом деле не означает отправку json в веб-сервис.

Это сработало для меня:

curl -v -H "Content-Type:multipart/form-data" -F "meta-data=@C:\Users\saurabh.sharma\Desktop\test.json;type=application/json" -F "file-data=@C:\Users\saurabh.sharma\Pictures\Saved Pictures\windows_70-wallpaper.jpg" http://localhost:7002/test/upload

test.json содержит данные json, которые я хочу отправить.

Из комментария @nbrooksдобавление дополнительного заголовка HTTP-заголовка отлично работает, как показано ниже, с использованием нескольких-H or --headerflags к вашей команде curl:


curl -H "comment: Submitting a new data set." -H  "current: false" -H "sheet: 1" -H "row: 7" -F file=@./File.xlsm -F name=file http://example.com/new_file/

comment а также currentможно объединить в "метаданные" вrequest.headers часть обработки на веб-сервере Flask.

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