我有一个谷歌云端硬盘文件夹,客户正在上传文件。其中一些是实际的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
添加到您的查询中。 - EmelFiles.get
页面中使用此API,以检查一切是否正常工作。另外,您是否正在使用服务帐户来检查文件? - Emel