Клиент Google Cloud Storage в Python проверяет CRC (или MD5) автоматически? - PullRequest
0 голосов
/ 07 октября 2018

Я попытался выяснить, blob.upload_from_file() и blob.download_to_file() проверка целостности загруженного или загруженного * *1001* GCS Python-клиента и, в частности,файл автоматически.Если нет, как я могу проверить хэш CRC программно?Будем благодарны за любые ссылки на документацию или исходный код.

1 Ответ

0 голосов
/ 09 октября 2018

В настоящее время проверка целостности в пакете GCS Python не полностью поддерживается автоматически как для загрузки, так и для загрузки.

Загрузки

Поддержка доступна для загрузок, которые не разделены на части илиявляются результатом операции compose [ 7 ] в зависимости google-resumable-media-python [ 4 ], которая обеспечивает проверку целостности только для только контрольной суммы MD5 объекта .Одна из основных причин, по которой не поддерживается чанкованная проверка, связана с тем, что Google Cloud Storage API не возвращает контрольные суммы MD5 или CRC32C для чанков объекта.Контрольные суммы MD5 и CRC32C доступны только для полных данных объекта.Загрузка не разделяется на части, когда экземпляр большого двоичного объекта _chunk_size равен None, что является значением по умолчанию для новых экземпляров Blob [ 1 ].Базовый пакет google-resumable-media-python [ 2 ] проверяет целостность [ 3 ] для используемого пакета google-cloud-storage [ 4 ], который используетсяblob.download_to_file [ 5 ].В настоящее время проверка CRC32C не поддерживается.

Загрузка

Для загрузки требуется, чтобы разработчик выполнил контрольные суммы MD5 или CRC32C перед выполнением загрузки, например, с использованием blob.upload_from_file() [ 6 ].

Пример с ожиданием того, что вы уже знаете форму base64 объектов CRC32C или MD5 (эти поля являются необязательными и используются только при загрузке):

from google.cloud import storage

storage_client = storage.Client()

bucket = storage_client.bucket("bucket-name")
new_blob = bucket.blob("new-blob-name")
# base64 encoded CRC32C
new_blob.crc32c = "EhUJRQ=="
# base64 encoded MD5
new_blob.md5_hash = "DDzeBxm1uuDBNd9hEy8WBA=="
with open('my-file', 'rb') as my_file:
    new_blob.upload_from_file(my_file)

GoogleОблачное хранилище будет использовать эти контрольные суммы для проверки на стороне сервера загрузки и завершит загрузку только при отсутствии ошибок.

Расчет MD5 или CRC32C для объекта в Python.

  1. Для проверки контрольной суммы объекта в Python я отложу следующие вопросы StackOverflow MD5 Создание контрольной суммы MD5 для файла

  2. CRC32C

У меня нет конкретного пакета, который я бы настоятельно рекомендовал в данный момент, но пакеты crcmod и crc32c существуют, и они могут помочь вам получить контрольную сумму данных.ng CRC32C программно.

Пример использования пакета crc32c для генерации ожидаемого значения для контрольной суммы GCS CRC32C:

from crc32c import crc32
import base64

with open('file-name') as f:
    # Read data and checksum
    checksum = crc32(f.read().encode())
    # Convert into a bytes type that can be base64 encoded
    base64_crc32c = base64.b64encode(checksum.to_bytes(length=4, byteorder='big')).decode('utf-8')
    # Print the Base64 encoded CRC32C
    print(base64_crc32c)

HTH

...