使用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():
答案 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;
};
}