C#调用Google Drive API V3上传文件返回ResponseBody为空问题求助
问题根源
你代码里的核心错误是MIME类型配置错误,且未正确处理上传返回的状态信息,具体问题及修正方案如下:
1. 错误的MIME类型配置
application/vnd.google-apps.file是Google Drive专属的内置文件占位符MIME标识,仅用于指代Google Workspace类型的文件,不能用于上传本地普通文件:
- 元数据
fileMetaData.MimeType不要填写该值,普通文件无需指定该属性,或传入本地文件的真实MIME类型即可 service.Files.Create构造方法的第三个参数同样不要填写该值,替换为对应文件的真实MIME类型,比如压缩包传application/zip、二进制文件传application/octet-stream
2. 未正确处理上传状态
request.Upload()方法会返回IUploadProgress类型的执行结果,你之前没有接收该返回值,自然无法获取异常信息,也无法判断上传是否真的执行成功:
- 只有当返回的
IUploadProgress.Status为UploadStatus.Completed时,request.ResponseBody才会有有效值 - 当状态为
UploadStatus.Failed时,IUploadProgress.Exception属性会存储具体的异常信息
修正后的代码示例
static string[] Scopes = { DriveService.Scope.DriveFile }; static string ApplicationName = "MyApp"; private static string CreateFile(string pFilePath, string parentFolderId, DriveService service) { var fileMetaData = new Google.Apis.Drive.v3.Data.File(); fileMetaData.Name = Path.GetFileName(pFilePath); // 不要使用谷歌专属MIME,普通文件无需指定MimeType,或填写真实文件类型 // fileMetaData.MimeType = "application/vnd.google-apps.file"; fileMetaData.Parents = new List<string> { parentFolderId }; FilesResource.CreateMediaUpload request; using(var stream = new FileStream(pFilePath, FileMode.Open)) { // 第三个参数替换为真实文件的MIME,不确定的话可以传application/octet-stream request = service.Files.Create(fileMetaData, stream, "application/octet-stream"); request.Fields = "id"; // 接收上传返回的进度信息 var uploadProgress = request.Upload(); // 检查上传状态 if(uploadProgress.Status == UploadStatus.Failed) { // 此处可以拿到具体异常信息处理 throw uploadProgress.Exception; } } var file = request.ResponseBody; return file.Id; }
内容的提问来源于stack exchange,提问作者Dasph
相关产品推荐
相关产品推荐

