Мутация Graphql для загрузки файла с другими полями

Я использую Ariadne для создания сервера Python GraphQL, и у меня есть следующая мутация для загрузки файла:

type Mutation {
    uploadUserAvatar(file: Upload!): Boolean!
}

И следующая команда curl для загрузки изображения:

curl http://localhost:8080/ \
  -F operations='{ "query":"mutation ($file: Upload!) { uploadUserAvatar(file: $file) }","variables": { "file": null} }' \
  -F map='{ "0": ["variables.file"] }' \
  -F 0=@image.jpeg

Приведенная выше команда отлично работает для загрузки изображения в конечную точку.

Но мне нужно передать вместе с изображением идентификатор пользователя в такой мутации:

type Mutation {
    uploadUserAvatar(userid: String!, file: Upload!): Boolean!
}

Я изо всех сил пытаюсь найти правильную команду curl для загрузки изображения с userid.

Я попробовал команду ниже

curl http://localhost:8080/ \
  -F operations='{ "query":"mutation ($userid: String!, $file: Upload!) { uploadUserAvatar(userid: $userid, file: $file) }","variables": { "file": null, "userid": null } }' \
  -F map='{ "0": ["variables.file"], "1": ["variables.userid"] }' \
  -F 0=@etiqueta_LG.jpeg \
  -F 1='abc1234'

Но я получаю такой ответ File data was missing for entry key '1' (https://github.com/jaydenseric/graphql-multipart-request-spec).

Как я могу вызвать конечную точку GraphQL, передав userid и image для загрузки?

2 ответа

Решение

Только файлы нуждаются в особой обработке, остальные данные передаются классическим способом, "variables".

curl http://localhost:8080/ \
  -F operations='{ "query":"mutation ($userid: String!, $file: Upload!) { uploadUserAvatar(userid: $userid, file: $file) }", "variables": { "file": null, "userid": "abc1234" } }' \
  -F map='{ "0": ["variables.file"] }' \
  -F 0=@image.jpeg

Не заворачивайте content часть данных формы, например -F name=content, как вы делаете с идентификатором пользователя. Попробуй это:

curl http://localhost:8080/ \
  -F operations='{ "query":"mutation ($userid: String!, $file: Upload!) { uploadUserAvatar(userid: $userid, file: $file) }","variables": { "file": null, "userid": null } }' \
  -F map='{ "0": ["variables.file"], "1": ["variables.userid"] }' \
  -F 0=@etiqueta_LG.jpeg \
  -F 1=abc1234

Я не пробовал, но прочитал документацию по curl (man curl) и прочтите раздел о данных формы -F.

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