Upload file with GraphQL +Ariadne + Flask: graphql.error.graphql_error.GraphQLError: Operation data should be a JSON object
Upload file with GraphQL +Ariadne + Flask: graphql.error.graphql_error.GraphQLError: Operation data should be a JSON object
我正在尝试使用此技术堆栈 (Flask + Graphql + Ariadne) 上传文件。我已经实现了其他 API,但现在对于文件上传它返回此错误。
错误
Traceback (most recent call last):
File "d:\project\python-envs\graph_ql_env\lib\site-packages\ariadne\graphql.py", line 138, in graphql_sync
validate_data(data)
File "d:\project\python-envs\graph_ql_env\lib\site-packages\ariadne\graphql.py", line 354, in validate_data
raise GraphQLError("Operation data should be a JSON object")
graphql.error.graphql_error.GraphQLError: Operation data should be a JSON object
127.0.0.1 - - [Time] "POST /graphql HTTP/1.1" 400 -
项目文件。
schema.graphql
scalar Upload
type Mutation {
uploadProfileImage(id: String!, image: Upload!): Boolean!
}
mutation.py
@convert_kwargs_to_snake_case
def resolve_upload_profile_image(obj, info, id, file):
main.py
mutation.set_field("uploadProfileImage", M.resolve_upload_profile_image)
type_defs = load_schema_from_path("schema.graphql")
schema = make_executable_schema(
type_defs, query, mutation, upload_scalar, snake_case_fallback_resolvers
)
@app.route("/graphql", methods=["POST"])
def graphql_server():
data = request.get_json()
success, result = graphql_sync(
schema,
data,
context_value=request,
debug=app.debug
)
status_code = 200 if success else 400
return jsonify(result), status_code
用 Altair 查询
mutation ($image: Upload!) {
uploadProfileImage (id:"qwe1", image:$image)
}
@graphql_bp.route("/", methods=["POST"])
def graphql_server():
if request.content_type.startswith("multipart/form-data"):
data = combine_multipart_data(
json.loads(request.form.get("operations")),
json.loads(request.form.get("map")),
dict(request.files)
)
else:
data = request.get_json()
success, result = graphql_sync(
schema,
data,
context_value=request,
debug=current_app.debug
)
status_code = 200 if success else 400
return jsonify(result), status_code
我正在尝试使用此技术堆栈 (Flask + Graphql + Ariadne) 上传文件。我已经实现了其他 API,但现在对于文件上传它返回此错误。
错误
Traceback (most recent call last):
File "d:\project\python-envs\graph_ql_env\lib\site-packages\ariadne\graphql.py", line 138, in graphql_sync
validate_data(data)
File "d:\project\python-envs\graph_ql_env\lib\site-packages\ariadne\graphql.py", line 354, in validate_data
raise GraphQLError("Operation data should be a JSON object")
graphql.error.graphql_error.GraphQLError: Operation data should be a JSON object
127.0.0.1 - - [Time] "POST /graphql HTTP/1.1" 400 -
项目文件。
schema.graphql
scalar Upload
type Mutation {
uploadProfileImage(id: String!, image: Upload!): Boolean!
}
mutation.py
@convert_kwargs_to_snake_case
def resolve_upload_profile_image(obj, info, id, file):
main.py
mutation.set_field("uploadProfileImage", M.resolve_upload_profile_image)
type_defs = load_schema_from_path("schema.graphql")
schema = make_executable_schema(
type_defs, query, mutation, upload_scalar, snake_case_fallback_resolvers
)
@app.route("/graphql", methods=["POST"])
def graphql_server():
data = request.get_json()
success, result = graphql_sync(
schema,
data,
context_value=request,
debug=app.debug
)
status_code = 200 if success else 400
return jsonify(result), status_code
用 Altair 查询
mutation ($image: Upload!) {
uploadProfileImage (id:"qwe1", image:$image)
}
@graphql_bp.route("/", methods=["POST"])
def graphql_server():
if request.content_type.startswith("multipart/form-data"):
data = combine_multipart_data(
json.loads(request.form.get("operations")),
json.loads(request.form.get("map")),
dict(request.files)
)
else:
data = request.get_json()
success, result = graphql_sync(
schema,
data,
context_value=request,
debug=current_app.debug
)
status_code = 200 if success else 400
return jsonify(result), status_code