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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:04