Как я могу публиковать файлы и данные 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 --header
flags к вашей команде 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.