簡體   English   中英

如何在 Google 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()

如何使用標頭?

  • 您想使用 google-api-python-client 和 python 從 Google Drive 實現文件的部分下載。
  • 您已經能夠使用帶有腳本的 Drive API 從 Google Drive 下載文件。

如果我的理解是正確的,這個答案怎么樣? 請將此視為幾種可能的答案之一。

改裝要點:

  • 在這種情況下,請求標頭中需要包含Range: bytes=500-999Range: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM