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



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

我已经验证了文件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=Object 引用未设置为对象的实例。Source=EPGMonitor StackTrace: at EPGMonitor.GoogleDrive.UploadFileToDrive(String fileName, String filePath, String contentType( in C:\Users\vanja\Documents\Projects\EPG Monitor\EPGMonitor\EPGMonitor\GoogleDrive.cs:line 73 at EPGMonitor.Monitor.d__8.MoveNext(( in C:\Users\vanja\Documents\Projects\EPG Monitor\EPGMonitor\EPGMonitor\Monitor.cs:line 51

我已经通过初始化要更新的新文件与重用 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;
};
}

相关内容

最新更新