Google Drive API V3 获取快捷方式原始文件

3

我有一个谷歌云端硬盘文件夹,客户正在上传文件。其中一些是实际的GDrive文件,而有些是指向其他驱动器或文件夹上的文件的快捷方式,我有权限读取它们。使用Python库,我可以成功地获取文件。但是,对于快捷方式文件,我得到了一个目标ID - 但尝试获取该ID会导致404错误,即使我在Web浏览器上有访问权限。

当我爬行我的驱动器并使用:

results = service.files().list(
            pageSize=10, fields="nextPageToken, files(id, name)").execute()
        items = results.get('files', [])

我获得了我的整个驱动器,也就是关于驱动器上任何文件和文件夹的所有元数据。其中一些类型是:MimeType: 'application/vnd.google-apps.shortcut'。

这些文件有一个额外的字段叫做“shortcutDetails”。它看起来像这样:

'shortcutDetails': {'targetId': SOME_ID, 'targetMimeType': SOME_MIMETYPE}

目标ID应该指向原始文件,但当我尝试获取该文件时,我收到了404文件未找到的错误请求,我想这是因为它不在我的驱动器中。 我正在使用此功能:
def resolve_shortcut(service, target_id):
    logging.info(f"Resolving shortcut with target: {target_id}")
    results = service.files().get(fileId=target_id, fields="files(*)", supportsAllDrives=True).execute()
    raw_files = results.get("files", [])
    logging.info(f"Shortcut resolved, first result id: {raw_files[0]['id']}...")
    assert len(raw_files) == 1
    return raw_files[0]

我得到的回报是:

  <HttpError 404 when requesting
 https://www.googleapis.com/drive/v3/files/SOME_ID?fields=files%28%2A%29&supportsAllDrives=true&alt=json
 returned "File not found:
 SOME_ID.". Details: "[{'domain':
 'global', 'reason': 'notFound', 'message': 'File not found:
 SOME_ID.', 'locationType':
 'parameter', 'location': 'fileId'}]">

有没有办法获取原始文件? 谢谢!


无法在我的端上重现,请尝试将 includeItemsFromAllDrives=True 添加到您的查询中。 - Emel
尝试一下,我得到了意外的参数:收到了一个意外的关键字参数includeItemsFromAllDrives。 - or.cohenadiv
抱歉,我的错误,这个参数是用于列表方法的。如果您可以访问该文件,则应该可以访问它,请尝试在Files.get页面中使用此API,以检查一切是否正常工作。另外,您是否正在使用服务帐户来检查文件? - Emel
2个回答

1
Files.get方法返回404错误,表示应用程序经过身份验证的用户无权访问该文件。
检查清单:
- 使用与应用程序进行身份验证的相同帐户登录Drive SDK,并尝试访问该文件。 - 检查您的应用程序是否使用正确的范围,例如:如果您正在使用https://www.googleapis.com/auth/drive.file,则只能访问您使用相应应用程序打开或创建的文件。 - 在文档中提到: - 告知用户他们无权读取文件或文件不存在。 - 指示用户联系文件所有者并请求文件权限。
文档:
- Drive v3 Oauth

0

要获取原始文件,您必须能够访问原始文件。请让他们与您分享该文件,而不是使用快捷方式。

404 文件未找到

这意味着该文件对您来说不存在。为了访问私人用户数据,必须获得访问该文件的权限。

如果有人向您提供了访问快捷方式,这并不意味着您可以访问文件本身。如果他们只是向您提供了共享链接,那么您将面临同样的问题。因为您没有文件的权限,所以无法通过api访问它。

要访问该文件,您必须获得授权。在文件调用中,permssions.list 将显示授予的权限。

与用户共享文件将授予权限,他们可以在api中使用它。

enter image description here

通过与我分享链接,用户将无法获得访问文件的权限。它不会在权限中插入一行,因此用户将无法通过API访问。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接