Как сделать частичную загрузку в Google Drive Api v3?

В документации сказано, что вам нужно использовать диапазон заголовка 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()

Как мне использовать заголовки?

Всего 1 ответ


  • Вы хотите добиться частичной загрузки файла с Google Drive с помощью google-api-python-client с python.
  • Вы уже смогли загрузить файл с Google Drive, используя Drive API с вашим скриптом.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как один из нескольких возможных ответов.

Точки модификации:

  • В этом случае свойство range, например Range: bytes=500-999 , необходимо включить в заголовок запроса. Это уже упоминалось в вашем вопросе.
    • Для 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()
    

Ссылка:

Если я неправильно понял ваш вопрос, а это не то направление, которое вы хотите, прошу прощения.


Есть идеи?

10000