如何在Google Drive Api v3中进行部分下载?

问题描述 投票:1回答:1

文档说here,您需要使用范围标题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()

如何使用标题?

python download header google-drive-api
1个回答
0
投票
  • 您想使用带有python的google-api-python-client从Google Drive实现文件的部分下载。
  • 您已经能够使用带有脚本的云端硬盘API从Google云端硬盘下载文件。

如果我的理解是正确的,那么这个答案怎么样?请认为这只是几个可能的答案之一。

修改点:

  • 在这种情况下,要求[Header]中必须包含Range: bytes=500-999之类的range属性。您的问题中已经提到了这一点。
    • 对于request = drive_service.files().get_media(fileId=file_id),它在标头中包含range属性。

修改脚本后,将如下所示。

修改的脚本:

从:
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()
    

参考:

如果我误解了你的问题,而这不是你想要的方向,我深表歉意。

© www.soinside.com 2019 - 2024. All rights reserved.