Python中的Google Cloud Storage客户端会自动检查CRC(或MD5)吗?

时间:2018-10-07 08:42:18

标签: python google-cloud-platform google-cloud-storage integrity

我试图找出GCS Python客户端,更具体地说blob.upload_from_file()blob.download_to_file()是否自动检查上传或下载文件的完整性。如果没有,如何以编程方式检查CRC哈希?任何指向文档或源代码的指针将不胜感激。

1 个答案:

答案 0 :(得分:2)

目前,GCS Python软件包中的完整性验证尚未完全自动支持上传和下载。

下载

对于不分块下载或由于依赖项google-resumable-media-python [7]中的组合操作[4]导致的下载可用,该支持为仅是对象的MD5校验和。不支持分块验证的主要原因之一是由于Google Cloud Storage API未返回对象块的MD5或CRC32C校验和。 MD5和CRC32C校验和仅适用于完整的对象数据。当Blob的实例_chunk_sizeNone时,下载内容不会分块,这是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中的对象计算MD5或CRC32C。

  1. 要对Python中的对象进行求和,我将遵循以下StackOverflow问题MD5 Generating an MD5 checksum of a file

  2. CRC32C

目前我没有强烈推荐的特定程序包,但是确实存在crcmodcrc32c程序包,它们可以帮助您以编程方式使用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