You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:03:34