В настоящее время проверка целостности в пакете 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.
Для проверки контрольной суммы объекта в Python я отложу следующие вопросы StackOverflow MD5 Создание контрольной суммы MD5 для файла
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