如何使用graphql-client上传文件?客户端Mutation调用及参数位置疑问
GraphQL客户端实现文件上传(byte[]处理)
GraphQL文件上传不能直接把byte[]塞进普通GraphQLRequest的Variables里,因为标准的文件上传需要用multipart/form-data格式传递文件,而非JSON序列化的方式。以下是针对你使用的GraphQL.NET客户端的实现步骤:
1. 调整Mutation查询
确保你的查询包含Upload类型的变量,示例:
mutation UploadImage($id: ID!, $file: Upload!) { uploadImage(id: $id, file: $file) { success message } }
2. 使用GraphQLMultipartRequest替代GraphQLRequest
用专门处理多部分请求的类来构造请求,把byte[]包装成文件内容添加到请求的文件集合中:
// 你的图片byte数组 var imageBytes = /* 你的byte[]数据 */; // 将byte[]包装为ByteArrayContent,指定正确的MIME类型 var fileContent = new ByteArrayContent(imageBytes); fileContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("image/jpeg"); // 构造多部分GraphQL请求 var request = new GraphQLMultipartRequest { Query = @"mutation UploadImage($id: ID!, $file: Upload!) { uploadImage(id: $id, file: $file) { success message } }", Variables = new { id = "你的ID值", file = null } // 变量中file设为null,通过Files集合传递 }; // 添加文件到请求,Name要和变量名(file)一致 request.Files.Add(new GraphQLFile { Name = "file", Filename = "image.jpg", // 自定义文件名 ContentType = "image/jpeg", Content = fileContent }); // 发送上传请求 var graphQLResponse = await _client.SendMutationAsync<dynamic>(request);
关键说明
- 不能直接把byte[]放入
Variables:JSON序列化会把byte[]转成base64字符串,这不符合GraphQL文件上传的标准规范,且多数服务端的文件上传处理逻辑不会识别这种格式。 - 必须用
GraphQLMultipartRequest:这类请求会自动把GraphQL查询、变量和文件打包成multipart/form-data格式,和你在GraphQL编辑器中使用的上传方式一致。
内容的提问来源于stack exchange,提问作者kolek
相关产品推荐
相关产品推荐

