如何使用Google Drive API v3更新/覆盖Google Drive上的现有文件

时间:2019-09-18 06:43:02

标签: c# google-api google-drive-api google-api-dotnet-client

使用Google Drive API v3更新Google Drive中的现有文件时遇到问题。在下面的代码中,create(第一次上传文档)工作正常(其他语句),但是更新失败。

我已验证fileId正确。

返回file.Id;引发异常填充为空。

感谢您的帮助。

public string UploadFileToDrive(string fileName, string filePath, string contentType)
        {
            var fileMetadata = new File();
            fileMetadata.Name = fileName;
            fileMetadata.Parents = new List<string> { folderId };
            DriveService service = GetDriveService(credential);

            string query = "mimeType!='application/vnd.google-apps.folder' and trashed = false and name = '" + fileName + "'";
            FilesResource.ListRequest req;
            req = service.Files.List();
            req.Q = query;
            req.Fields = "files(id, name)";
            var result = req.Execute();

            if (result.Files.Count == 1)
            {
                FilesResource.UpdateMediaUpload updateRequest;
                string fileId = result.Files[0].Id;

                using (var stream = new FileStream(filePath, FileMode.OpenOrCreate))
                {
                    updateRequest = service.Files.Update(fileMetadata, fileId, stream, contentType);
                    updateRequest.Upload();
                    var file = updateRequest.ResponseBody;
                    return file.Id;
                };
            }
            else
            {
                FilesResource.CreateMediaUpload request;
                using (var stream = new FileStream(filePath, FileMode.Open))
                {
                    request = service.Files.Create(fileMetadata, stream, contentType);
                    request.Fields = "id";
                    request.Upload();
                    var file = request.ResponseBody;
                    return file.Id;
                };
            }
        }
  

System.NullReferenceException HResult = 0x80004003 Message =对象引用未设置为对象的实例。 Source = EPGMonitor StackTrace:位于EPGMonitor.GoogleDrive.UploadFileToDrive(String fileName,String filePath,String contentType)位于C:\ Users \ vanja \ Documents \ Projects \ EPG Monitor \ EPGMonitor \ EPGMonitor \ GoogleDrive.cs:EPGMonitor.Monitor的第73行C:\ Users \ vanja \ Documents \ Projects \ EPG Monitor \ EPGMonitor \ EPGMonitor \ Monitor.cs中的.d__8.MoveNext():

1 个答案:

答案 0 :(得分:0)

我已通过初始化新文件进行更新而不是重用Create使用的文件实例来解决问题。 这是更新的代码:

if (result.Files.Count == 1)
{
    File updatedFileMetadata = new File();
    updatedFileMetadata.Name = fileName;

    FilesResource.UpdateMediaUpload updateRequest;
    string fileId = result.Files[0].Id;
    using (var stream = new FileStream(filePath, FileMode.OpenOrCreate))
    {
        updateRequest = service.Files.Update(updatedFileMetadata, fileId, stream, contentType);
        updateRequest.Upload();
        var file = updateRequest.ResponseBody;
        return file.Id;
    };
}