Kev*_*vin 5 python integrity google-cloud-storage google-cloud-platform
我试图找出GCS Python 客户端,更具体地说,blob.upload_from_file()并自动blob.download_to_file()检查上传或下载文件的完整性。如果没有,我如何以编程方式检查 CRC 哈希?任何指向文档或源代码的指针将不胜感激。
目前,GCS Python 包中的完整性验证并未完全自动支持上传和下载。
支持未分块的下载或依赖项 google-resumable-media-python[ 4 ]中的组合操作 [ 7 ]结果的下载,该依赖项仅为对象的 MD5 校验和提供完整性验证。不支持分块验证的一个主要原因是 Google Cloud Storage API 不返回对象块的 MD5 或 CRC32C 校验和。MD5 和 CRC32C 校验和仅适用于完整对象数据。当 blob 的实例是[ 1 ] 的新实例的默认值时,下载不会被分块。底层包 google-resumable-media-python[ 2 ] 验证完整性 [ 3 ]_chunk_sizeNoneBlob] 用于[ 5 ]使用的 google-cloud-storage 包 [ 4 ]。目前不支持 CRC32C 验证。blob.download_to_file
上传要求开发人员在执行上传之前执行 MD5 或 CRC32C 校验和,例如使用blob.upload_from_file()[ 6 ]。
示例期望您已经知道对象 CRC32C 或 MD5 的 base64 形式(这些字段是可选的,仅用于上传):
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)
Run Code Online (Sandbox Code Playgroud)
Google Cloud Storage 将使用这些校验和来验证上传服务器端,只有在没有发现错误时才完成上传。
对于 Python 中的对象校验和,我将遵循以下 StackOverflow 问题 MD5 Generating an MD5 checksum of a file
CRC32C
我目前没有强烈推荐的特定包,但crcmod和crc32c包确实存在,它们可以帮助您以编程方式使用 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)
Run Code Online (Sandbox Code Playgroud)
HTH