我试图找出GCS Python客户端,更具体地说blob.upload_from_file()
和blob.download_to_file()
是否自动检查上传或下载文件的完整性。如果没有,如何以编程方式检查CRC哈希?任何指向文档或源代码的指针将不胜感激。
答案 0 :(得分:2)
目前,GCS Python软件包中的完整性验证尚未完全自动支持上传和下载。
对于不分块下载或由于依赖项google-resumable-media-python [7]中的组合操作[4]导致的下载可用,该支持为仅是对象的MD5校验和。不支持分块验证的主要原因之一是由于Google Cloud Storage API未返回对象块的MD5或CRC32C校验和。 MD5和CRC32C校验和仅适用于完整的对象数据。当Blob的实例_chunk_size
为None
时,下载内容不会分块,这是Blob
[1]的新实例的默认值。基础包google-resumable-media-python [2]验证blob.download_to_file
使用的google-cloud-storage包[3]的完整性[4] [5]。目前不支持CRC32C验证。
上载要求开发人员在执行上载之前执行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)
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)
HTH