【问题标题】:Can't upgrade permissions on file uploaded with Google Drive API v3无法升级使用 Google Drive API v3 上传的文件的权限
【发布时间】:2020-07-23 14:22:06
【问题描述】:

我刚开始使用 Google Drive API,结果发现我无法迁移所创建文件的所有权。 我从服务帐户上传了一个文件以驱动,然后给自己“作者”权限并尝试将自己更新为所有者,因为它是在 api 文档中编写的。

media = MediaFileUpload(filename, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
file = driveService.files().create(media_body=media, fields='id').execute()
access = driveService.permissions().create(
    fileId = file['id'],
    body = {'type': 'user', 'role': 'writer', 'emailAddress': my_email},
    fields = 'id'
).execute()
update = driveService.permissions().update(fileId=file.get('id'), 
                                         permissionId=access.get('id'), 
                                         transferOwnership=True,
                                         body = {'role': 'owner', 'emailAddress': my_email }).execute()
--------------------------------------------------------------------------
HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/file_id/permissions/permission_id?transferOwnership=true&alt=json returned "The resource body includes fields which are not directly writable.">

更新: 问题已通过删除“emailAddress”参数得到修复,但随后出现新错误:

HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/fileId/permissions/permissionId?transferOwnership=true&alt=json returned "The user does not have sufficient permissions for this file.">

另一个更新:我重新上传了凭证文件并修复了第二个错误。

【问题讨论】:

标签: python google-api google-drive-api google-api-client


【解决方案1】:

根据docs,正文的可写参数只有“角色”和“到期时间”,但您试图再次将电子邮件地址分配给现有权限,因此出现错误“资源正文包含不可直接写入的字段。”

access中创建的权限已经有一个与之关联的电子邮件,您只能更改“角色”和“过期时间”。 access 中的请求正文也没有指定“角色”,它指定了“作者”属性,所以这是一个错字。


更新:

当您将文件插入云端硬盘时,该文件的所有者就是上传文件所在的云端硬盘的所有者。 所以我假设:

  1. 服务帐户(已上传文件的初始所有者)模拟的帐户与您在access 对象中创建权限的电子邮件地址不同。李>
  2. 在请求的body中创建user类型的权限,需要传入idvalue可选参数来识别用户。 (您正确传递了“id”,但“emailAddress”是多余的)Try in API explorer
  3. 第一次更新权限时,您可能已经将所有权转移给了“writer”权限的用户,该用户现在应该是文件的所有者,因此模拟帐户没有足够的权限访问该文件。

您可以在向Files.get 发出请求的 API 资源管理器中快速检查文件权限,并查看文件的所有者以及所有其他属性。

【讨论】:

  • 嗨,玛丽亚,如果您发现问题中有错误,您可以通过编辑来更新它。请阅读how-to-ask 以获取有关如何提出好问题的建议。此外,SO 意味着一个问题一个接受的答案,在 cmets 中提出新问题是不好的做法,尝试编辑您的问题以反映您遇到的问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
相关资源
最近更新 更多