【发布时间】:2022-12-18 16:32:31
【问题描述】:
我们有一个。网使用 Google Drive api 将文件上传到 g-drive 的应用程序。它几天前(11 月 29 日)就停止工作了。但我们不记得在那段时间做过任何改变。
在调查过程中,我们可以确认调用 Google API 的服务帐户是有效的,因为同一个服务帐户也被用于调用其他 Google API,并且工作正常。我们也可以确认这不是权限问题,因为我们甚至将 gdrive 的权限设置为允许拥有链接的“任何人”拥有编辑权限,但问题仍然存在。
不幸的是,我们找不到任何有用的日志,API 调用的返回信息是NULL。没有返回错误代码或错误消息。我们看到的唯一相关信息是:在“Error by API method”图表上,显示“drive.files.create”失败 100%。
一件有趣的事情是,如果我们禁用 Google Drive API,然后再次启用它,它会工作一次,然后会再次停止工作。
private string SaveFileToGoogleDrive(IFormFile file, string claimNumber)
{
try
{
var driveService = GetDriveServiceInstance();
var fileMetadata = new Google.Apis.Drive.v3.Data.File();
var mimeType = file.ContentType;
fileMetadata.Name = CreateFileName(file.FileName, claimNumber);
fileMetadata.MimeType = mimeType;
fileMetadata.Parents = new List { _googleSettings.GoogleDriveFolderId };
FilesResource.CreateMediaUpload request;
using (var stream = new MemoryStream())
{
file.CopyTo(stream);
request = driveService.Files.Create(fileMetadata, stream, mimeType);
request.Fields = "id";
request.Upload();
}
var googleFile = request.ResponseBody; \\The response body is always NULL, after the issue happened. :(
return googleFile.Id;
}
catch(Exception ex)
{
_logger.Error($"Google Drive exception {ex.Message} SACKTRACE: {(ex.StackTrace ?? "")} INNER EXCEPTION: {(ex.InnerException != null ? ex.InnerException.Message + "STACK TRACE:" + ex.InnerException.StackTrace ?? "" : "")}");
return string.Empty;
}
}
我们从响应对象中的 progress 属性中找到了更多详细信息,并看到错误消息“已超出用户的 Drive 存储配额。”,但这根本没有意义,因为我们使用的是“企业版”Google Workspace,这应该是没有限制的。服务帐户和密钥看起来不错,GCP 一点也不抱怨。这是我们在故障排除期间检查的第一件事。
您是否知道如何解决该问题或在调查此问题时还要寻找什么?
【问题讨论】:
-
请编辑您的问题并包含一条错误消息,您怎么知道它不能正常工作?你将不得不在你的最后添加更多调试。它可以是任何东西,超时,空间不足。我会倾向于空间不足,因为重新创建它会修复它,直到你再次用完空间。尝试从服务帐户添加一个 about.get 并查看它还剩多少空间。
-
谢谢你,就像我在原来的帖子中提到的那样,除了仪表板中显示的唯一证据 - “drive.files.create” 失败之外,没有记录任何错误,这很奇怪。
标签: google-api google-drive-api