【问题标题】:How to update/overwrite existing file on Google Drive using Google Drive API v3如何使用 Google Drive API v3 更新/覆盖 Google Drive 上的现有文件
【发布时间】:2019-09-18 06:43:02
【问题描述】:

我在使用 Google Drive API v3 更新 Google Drive 中的现有文件时遇到问题。从下面的代码创建(第一次上传文档)工作得很好(else 语句)但是,更新失败。

我已验证 fileId 是正确的。

返回文件.Id;抛出异常 fill 为 null。

感谢任何帮助。

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 消息=对象引用未设置为对象的实例。 Source=EPGMonitor StackTrace: 在 EPGMonitor.GoogleDrive.UploadFileToDrive(String fileName, String filePath, String contentType) in 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: 51 行中的 .d__8.MoveNext()

【问题讨论】:

  • 请发布完整的例外情况
  • 这里有一个例外:System.NullReferenceException HResult=0x80004003 Message=对象引用未设置为对象的实例。 Source=EPGMonitor StackTrace: 在 EPGMonitor.GoogleDrive.UploadFileToDrive(String fileName, String filePath, String contentType) in C:\Users\vanja\Documents\Projects\EPG Monitor\EPGMonitor\EPGMonitor\GoogleDrive.cs: EPGMonitor.Monitor 的第 73 行.d__8.MoveNext() 在 C:\Users\vanja\Documents\Projects\EPG Monitor\EPGMonitor\EPGMonitor\Monitor.cs:51 行
  • 什么是 result.FirstOrDefault()

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


【解决方案1】:

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

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;
    };
}

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多