Graphql突变以与其他字段一起上传文件

时间:2020-07-01 17:32:08

标签: python graphql ariadne-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

上面的命令可以完美地将图像上传到端点。

但是,我需要将图像与用户ID一起传递,如下所示:

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).

如何通过传递useridimage来调用我的GraphQL端点?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

不要像处理content那样包装表单数据的-F name=content部分,就像处理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

我还没有尝试过,但是我阅读了curl文档(man curl)并阅读了有关表单数据-F的部分。