![](/img/trans.png)
[英]How to download a file from Google Drive using Python and the Drive API v3
[英]Google drive API V3 Fetch original file from shortcut
我有一個客戶上傳文件的 Google Drive 文件夾。 其中一些是實際的 GDrive 文件,還有一些是我有權讀取的其他驅動器或文件夾上的文件的快捷方式。 我可以使用 Python 庫成功get
文件。 但是,對於快捷方式文件,我得到了一個目標 ID——但嘗試get
該 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}
targetId 應該指向原始文件,但是當我嘗試獲取該文件時,我得到一個找不到床請求 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'}]">
有沒有辦法獲取原始文件? 謝謝!
使用Files.get
方法的錯誤 404 是指通過應用程序驗證的用戶無權訪問該文件。
檢查清單:
https://www.googleapis.com/auth/drive.file
,您只能訪問您使用相應應用程序https://www.googleapis.com/auth/drive
要獲取原始文件,您必須有權訪問原始文件。 讓他們與您分享,而不是捷徑。
404 找不到文件
意味着該文件不存在,至少對您而言。 為了訪問私人用戶數據,必須具有訪問該文件的權限。
如果有人讓您訪問快捷方式。 這並不意味着您可以訪問文件本身。 如果他們只是給你一個文件鏈接的共享,你會遇到同樣的問題。 您沒有該文件的權限,因此您將無法通過 api 訪問它。
要獲得訪問權限,您必須已被授予權限。 它將顯示在文件調用的permssions.list中。
與用戶共享文件將授予權限,他們可以在 api 中使用它。
與我共享鏈接不會授予用戶訪問文件的權限。 它不會在權限中插入一行,因此用戶將無法通過 api 訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.