【问题标题】:How to do a partial download in Google Drive Api v3?如何在 Google Drive Api v3 中进行部分下载?
【发布时间】:2020-01-16 05:40:39
【问题描述】:

文档说here 需要使用 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()

如何使用标题?

【问题讨论】:

    标签: python download header google-drive-api


    【解决方案1】:
    • 您希望使用带有 python 的 google-api-python-client 从 Google Drive 中部分下载文件。
    • 您已经能够使用 Drive API 和您的脚本从 Google Drive 下载文件。

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

    修改点:

    • 在这种情况下,像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()
      

    参考:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-06
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2020-06-21
      • 1970-01-01
      相关资源
      最近更新 更多