![](/img/trans.png)
[英]How to download a file from Google Drive using Python and the Drive API v3
[英]How to do a partial download in Google Drive Api v3?
文檔在這里說您需要使用 Range 標頭Range: bytes=500-999
。
我的代碼
def downloadChunkFromFile(file_id, start, length):
headers = {"Range": "bytes={}-{}".format(start, start+length)}
#How do I insert the headers?
request = drive_service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request, chunksize=length)
done = False
while done is False:
status, done = downloader.next_chunk()
return fh.getvalue()
如何使用標頭?
如果我的理解是正確的,這個答案怎么樣? 請將此視為幾種可能的答案之一。
Range: bytes=500-999
等Range: bytes=500-999
屬性。 這已經在你的問題中提到了。
request = drive_service.files().get_media(fileId=file_id)
,它在標頭中包含范圍屬性。當你的腳本被修改時,它變成如下。
request = drive_service.files().get_media(fileId=file_id) fh = io.BytesIO() downloader = MediaIoBaseDownload(fh, request, chunksize=length) done = False while done is False: status, done = downloader.next_chunk() return fh.getvalue()
到:
request = drive_service.files().get_media(fileId=file_id) request.headers["Range"] = "bytes={}-{}".format(start, start+length) fh = io.BytesIO(request.execute()) return fh.getvalue()
MediaIoBaseDownload
時,發現文件是完全下載的,沒有使用 range 屬性。 所以我不使用MediaIoBaseDownload
。 您也可以使用如下requests
。
url = "https://www.googleapis.com/drive/v3/files/" + file_id + "?alt=media" headers = {"Authorization": "Bearer ###accessToken###", "Range": "bytes={}-{}".format(start, start+length)} res = requests.get(url, headers=headers) fh = io.BytesIO(res.content) return fh.getvalue()
如果我誤解了您的問題並且這不是您想要的方向,我深表歉意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.