【发布时间】:2015-03-28 07:58:58
【问题描述】:
作为学生,我有一个 Google 帐户。此帐户由我的大学管理,最近大学通知我们,学生的帐户现在可以“无限”存储云端硬盘等。
为了执行备份,我在 Google API 控制台 (XXX@developer.gserviceaccount.com) 中创建了一些服务帐户。但事实证明,这些帐户的存储空间限制为 15GB,也就是说,当尝试将文件上传到其中已经有 ~15GB 的服务帐户之一时,我收到一个错误“客户端超出了他的存储配额”。
我询问了大学管理员,他们不知道如何提供帮助,甚至在托管帐户列表中都没有看到服务帐户的电子邮件 (XXX@developer.gserviceaccount.com)。
所以问题是(由我或大学管理员)应该做什么来删除(或增加)我的服务帐户的存储配额,当这些服务帐户使用“无限制”学生帐户打开时。
更新:尝试@DaImTo 建议:
所以我在我的云端硬盘网络界面中创建了一个文件夹并与我的服务帐户共享它。然后,使用服务帐户,我将文件上传到该文件夹(使用 PyDrive 库):
file1 = drive.CreateFile({'title': 'test2', 'parents': [{"kind": "drive#fileLink", "id": shared_folder_id}]})
file1.SetContentString('some text')
file1.Upload()
print 'File ID: %s' % file1['id']
permissions = file1.auth.service.permissions().list(fileId=file1['id']).execute()
print "permissions:", permissions
输出:
File ID: XXX
permissions: {u'items': [{u'kind': u'drive#permission', u'name': u'XXX@developer.gserviceaccount.com', u'domain': u'developer.gserviceaccount.com', u'etag': u'"XXX"', u'emailAddress': u'XXX@developer.gserviceaccount.com', u'role': u'owner', u'type': u'user', u'id': u'XXX', u'selfLink': u'https://www.googleapis.com/drive/v2/files/XXX/permissions/XXX'},
{u'kind': u'drive#permission', u'name': u'<my name>', u'domain': u'<my school domain>', u'etag': u'"XXX"', u'emailAddress': u'<my name>@<my school domain>', u'role': u'writer', u'type': u'user', u'id': u'XXX', u'selfLink': u'https://www.googleapis.com/drive/v2/files/XXX/permissions/XXX'}], u'kind': u'drive#permissionList', u'etag': u'"XXX"', u'selfLink': u'https://www.googleapis.com/drive/v2/files/XXX/permissions?alt=json'}
所以上传的文件自动拥有两个权限: 1.服务帐号是“所有者” 2.我的主账号是“作家”
确实,我可以在网页界面看到文件,编辑,删除等。但是,由于服务帐户是所有者,文件被计入服务帐户存储配额,所以这并不能解决我的问题,即我的备份应用程序仍然无法使用超过 15GB 的空间。
我尝试将所有权转移到我的主帐户:
file1 = drive.CreateFile({'id': file_id})
permissions = file1.auth.service.permissions().list(fileId=file1['id']).execute()
myperm_id = permissions['items'][1]['id'] # this is the second permission, i.e. of my main account
myperm = file1.auth.service.permissions().get(fileId=file1['id'], permissionId=myperm_id).execute()
myperm['role'] = 'owner'
file1.auth.service.permissions().update(fileId=file1['id'], permissionId=myperm['id'], body=myperm).execute()
...得到一个错误:
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v2/files/XXX/permissions/XXX?alt=json returned "Insufficient permissions for this file">
我尝试附加 transferOwnership='True':
file1.auth.service.permissions().update(fileId=file1['id'], permissionId=myperm['id'], body=myperm, transferOwnership='True').execute()
遇到同样的错误。我被困在这里了。
顺便说一句,在 Google 帮助中 Transfer file ownership 他们说“如果您是 Google Apps 用户,则不能将所有权转让给您域外的其他人。”
【问题讨论】:
标签: google-api google-drive-api google-apps google-apps-for-education