如何用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
相关产品推荐
相关产品推荐

