curl post: как отправить файл и данные json за один запрос - PullRequest
0 голосов
/ 29 августа 2018

Как отправить файл и данные в одном завитке POST?

Пробовал что-то вроде использования параметров -F и -d вместе, но это не помогло:

curl  -X POST -F 'file=/Users/<uid>/model.tar.gz' http://<uri>/api/v1/modelfiles/ -H 'AUTH-TOKEN:<token>' -d '{"model_id": "<uuid>",
           "filename": "model.tar.gz",
           "framework": "Tensorflow",
           "framework_version": "1.8.0",
           "meta": {}
}'

1 Ответ

0 голосов
/ 29 августа 2018

Короткая версия: вы не можете. Это не так, как работает HTTP. Вы можете отправить один блок данных в одном запросе POST, но вы пытаетесь отправить два (строку JSON и файл).

Более длинная версия: это зависит от того, что ожидает ваш сервис. Предполагается, что данные из файла являются частью JSON? Затем вам нужно предварительно обработать JSON и поместить в него данные файла, чтобы вы отправили -d '{"file": "<your file data here>", "filename": ... }'

Предполагается ли, что файл является полем формы с именем "file", а данные JSON являются содержимым поля с именем "json"? Затем вы можете отправить оба, используя -F file=@/users/uid/model.tar.gz -F 'json={...}'. Curl позаботится о включении их в блоб, так же, как если бы у вас была форма браузера с двумя полями.

(обратите внимание также на знак @ перед именем файла; вам нужно это, иначе вы отправляете строку "/users/uid/model.tar.gz")

Это что-то еще? Может быть, вы должны сначала отправить данные, а потом JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...