使用服务帐户上传的Google云端硬盘始终返回403(存储配额)

时间:2018-05-23 15:33:50

标签: c# .net google-drive-api

我写了一些逻辑,将文件上传到Google云端硬盘文件夹,该文件夹与服务帐户共享(uploader@uploadproject-204816.iam.gserviceaccount.com)

Google云端硬盘本身与我的G Suite帐户相关联。

这工作了一段时间,但最终我开始收到此错误:

  

Google.Apis.Requests.RequestError用户的云端硬盘存储空间配额   被超过了。 [403]错误[消息[用户的云端硬盘存储空间配额   已超出。]位置[ - ]原因[storageQuotaExceeded]   域[全球]]

从那时起,上传工作无效,即使上传了一个微弱的文件也会出现此错误。

使用我的真实帐户,我清理了服务帐户拥有的所有文件,甚至是那些“无组织”的文件。

左边的配额说“使用了170MB的30GB”

我也等了24个多小时。

我认为这是关于服务帐户本身,而不是驱动器。但我不确定要检查什么。

我尝试检查About.Get()方法的结果,找不到任何有用的东西。

var cred = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(clientEmail)
{
            Scopes = (new[] { "https://www.googleapis.com/auth/drive" }).ToList()
}.FromPrivateKey(privateKey));

service = new DriveService(new Google.Apis.Services.BaseClientService.Initializer { ApiKey = apiKey, HttpClientInitializer = cred });
var about = service.About.Get();

编辑:

原来我需要做些其他事情才能获得有关配额的更多信息

var get = service.About.Get();
get.Fields = "*";
var about = get.Execute();

然后我可以在about.StorageQuota

中看到
Limit: 16106127360
Usage: 16106125128

确实,我现在了解存储配额错误。问题是,如何重置这些数字?上传服务帐户的所有文件都被MY帐户删除在同一位置。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

结果是降低了服务帐户的存储空间,还需要使用服务帐户删除文件。

When does the files get deleted from Google Drive Service account?

答案 1 :(得分:0)

您无法删除使用真实帐户由帐户服务创建(拥有)的文件。

即使您这样做,也不会在真实帐户中看到文件,但仍会在服务帐户中看到文件。

您必须使用帐户服务将其删除。

下面的脚本解释了如何使用PHP删除文件。为此,您必须知道要删除的文件的ID。因此我们要求获取由0B1-GGKdq5A3qX1dzNkhOLW1VWVU引用的父文件夹中包含的所有文件ID(每个文件和文件夹都由唯一的UID引用,如此),然后进行循环删除每个文件。

首先创建客户端以连接到服务帐户

$drive_service = new Google_Service_Drive($client);

秒,获取0B1-GGKdq5A3qX1dzNkhOLW1VWVU引用的文件夹中的所有文件

$files_list = $drive_service->files->listFiles(array(
                'fields' =>  'files(id, name)',
                'q' => "'0B1-GGKdq5A3qX1dzNkhOLW1VWVU' in parents" , 
);)  ;
$files_list = $files_list->getFiles() ;

然后执行循环以删除所有文件

foreach ($files_list as $file){
        $id = $file->id;
        $resp = $drive_service->files->delete($id);
}