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

如何用C#向Google Drive发起Multipart上传请求上传小文件?

C#实现Google Drive Multipart小文件上传完整方案

嘿,你已经开了个好头!我来帮你补全并优化这段代码,让它能顺利完成Google Drive的Multipart上传。先直接上完整可运行的代码,再拆解关键细节:

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

public async Task UploadFileToGoogleDrive(byte[] fileBytes, string accessToken, string fileName, string mimeType)
{
    using (var client = new HttpClient())
    {
        // 配置授权头,这是调用Google API的必备项
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

        // 创建Multipart请求容器,注意类型必须是"mixed",这是Drive API要求的
        var multipartContent = new MultipartContent("mixed");

        // 第一部分:文件元数据(JSON格式),告诉Drive文件的基本信息
        var fileMetadata = new
        {
            name = fileName,
            mimeType = mimeType
            // 可以额外加其他属性,比如parents指定文件夹ID,description描述等
        };
        var metadataContent = new StringContent(
            Newtonsoft.Json.JsonConvert.SerializeObject(fileMetadata),
            Encoding.UTF8,
            "application/json");
        multipartContent.Add(metadataContent);

        // 第二部分:实际的文件二进制内容
        var fileBinaryContent = new ByteArrayContent(fileBytes);
        fileBinaryContent.Headers.ContentType = MediaTypeHeaderValue.Parse(mimeType);
        multipartContent.Add(fileBinaryContent);

        // 发送上传请求到指定端点
        var uploadEndpoint = new Uri("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart");
        var response = await client.PostAsync(uploadEndpoint, multipartContent);

        // 处理上传结果
        if (response.IsSuccessStatusCode)
        {
            var result = await response.Content.ReadAsStringAsync();
            Console.WriteLine($"上传成功!文件信息:{result}");
            // 这里可以解析result拿到文件ID,用于后续操作
        }
        else
        {
            var errorMsg = await response.Content.ReadAsStringAsync();
            Console.WriteLine($"上传失败!状态码:{response.StatusCode},错误详情:{errorMsg}");
        }
    }
}

关键细节说明

  • Multipart类型必须是mixed:Google Drive的Multipart上传要求用这个类型来分隔元数据和文件内容,别搞错成form-data之类的。
  • 元数据配置:用JSON格式传递文件名、MIME类型,还可以额外指定文件要存入的文件夹(parents字段,传文件夹ID数组)、文件描述等。这里用了Newtonsoft.Json序列化,记得在NuGet里安装这个包:Install-Package Newtonsoft.Json。
  • 权限检查:你的access_token必须拥有drive相关的权限(比如https://www.googleapis.com/auth/drive或者更窄的drive.file),否则会返回403错误。
  • 异步处理:整个方法用async/await实现异步调用,避免阻塞主线程,调用的时候记得也要用await。

额外提醒

  • 这个方案适合5MB以下的小文件,如果是大文件,建议用Google Drive的断点续传(Resumable Upload)方案。
  • 调试的时候如果遇到错误,一定要打印出响应的错误内容,Google API的错误信息通常很详细,能帮你快速定位问题(比如权限不够、MIME类型错误等)。

内容的提问来源于stack exchange,提问作者JenSmith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:34:40