Надежно загружать большие файлы на Google Drive - PullRequest
1 голос
/ 31 октября 2019

Я использую Python googleapiclient для загрузки некоторых больших файлов на Google Drive. Я хочу убедиться, что файлы загружены правильно. Я безуспешно искал способы получить контрольную сумму файла MD5 на Google Диске. Вот код:

def print_file_metadata(service, file_id):
    """Print a file's metadata.

  Args:
    service: Drive API service instance.
    file_id: ID of the file to print metadata for.
  """
    try:
        file = service.files().get(fileId=file_id).execute()

        print('Title: %s' % file['title'])
        print('MIME type: %s' % file['mimeType'])
    except errors.HttpError as error:
        print('An error occurred: %s' % error)

Для файлов, которые я тестировал, похоже, что файл dict не содержит контрольной суммы MD5. Есть ли способ получить его из API? Или есть другой способ проверки правильности загрузки файла?

1 Ответ

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

Если мое понимание правильное, как насчет этого ответа?

При использовании Drive API v2 значения, возвращаемые из files().get(), включают контрольную сумму файла MD5. В этом случае, пожалуйста, измените ваш скрипт следующим образом.

Модифицированный скрипт: Для Drive API v2

file = service.files().get(fileId=file_id).execute()

print('Title: %s' % file['title'])
print('MIME type: %s' % file['mimeType'])
print('MD5: %s' % file['md5Checksum'])  # <--- Added

Модифицированный скрипт: Для Drive API v3

В случаеDrive API v3, значения, возвращаемые из files().get(), не включают контрольную сумму файла MD5. Поэтому в качестве одного из нескольких методов вы можете использовать fields='*', как показано ниже. Но в этом случае имя файла file['name']. Пожалуйста, будьте осторожны с этим.

file = service.files().get(fileId=file_id, fields='*').execute()  # <--- Modified
print('Title: %s' % file['name'])  # <--- Modified
print('MIME type: %s' % file['mimeType'])
print('MD5: %s' % file['md5Checksum'])  # <--- Added

Ссылки:

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

...