如何防止GCS在使用Python SDK时自动解压objects?
How to prevent GCS from automatically decompressing objects when using Python SDK?
我正在尝试在 GCS 中下载压缩的 object,但如果 GCS 没有自动为我解压缩文件,我无法下载它。我希望能够自己下载gzip,然后在本地解压。
如果我在 GCS gui 中转到我的 object,我可以查看 object 元数据并看到以下内容:
Content-Type: application/json
Content-Encoding: gzip
Cache-Control: no-transform
此外,如果我在控制台中右键单击 Authenticated URL
并单击 Save Link As
,我会得到一个 gzip 存档,所以我知道这个文件实际上是一个存档。
我在 GCS's documentation 上读到,您可以设置 Cache-Control: no-transform
,然后“object 在所有后续请求中用作压缩的 object”。
除非我使用下面的代码下载 GCS object 它是作为 JSON object 下载的,而不是 gzip 存档:
bucket = storage_client.get_bucket("bucketname")
blob = bucket.blob("objectname")
stringobj = blob.download_as_text()
bytesobj = blob.download_as_bytes()
blob.download_to_filename("test.json.gz")
我尝试了三种不同的方法来下载 object,它们都将文件下载为 JSON objects.
只是为了验证 object 确实具有正确的 headers,我 运行 以下内容:
blob.reload()
print(f"Content encoding: {blob.content_encoding}")
print(f"Content type: {blob.content_type}")
print(f"Cache control: {blob.cache_control}")
>> Content encoding: gzip
>> Content type: application/json
>> Cache control: no-transform
我不确定我还能尝试什么。
我复现了你的问题。我听从了您的输入并得到了类似的行为,因为我下载了一个文件名具有 .gz 扩展名的 gzip 存档。但是,gunzip
-ing 文件 returns 出错:
Example.json.gz: not in gzip format
解决方案是使用raw_download=True
下载原始gzip压缩文件,以防止发生解压转码。
示例:
blob.download_to_filename("test.json.gz", raw_download=True)
我正在尝试在 GCS 中下载压缩的 object,但如果 GCS 没有自动为我解压缩文件,我无法下载它。我希望能够自己下载gzip,然后在本地解压。
如果我在 GCS gui 中转到我的 object,我可以查看 object 元数据并看到以下内容:
Content-Type: application/json
Content-Encoding: gzip
Cache-Control: no-transform
此外,如果我在控制台中右键单击 Authenticated URL
并单击 Save Link As
,我会得到一个 gzip 存档,所以我知道这个文件实际上是一个存档。
我在 GCS's documentation 上读到,您可以设置 Cache-Control: no-transform
,然后“object 在所有后续请求中用作压缩的 object”。
除非我使用下面的代码下载 GCS object 它是作为 JSON object 下载的,而不是 gzip 存档:
bucket = storage_client.get_bucket("bucketname")
blob = bucket.blob("objectname")
stringobj = blob.download_as_text()
bytesobj = blob.download_as_bytes()
blob.download_to_filename("test.json.gz")
我尝试了三种不同的方法来下载 object,它们都将文件下载为 JSON objects.
只是为了验证 object 确实具有正确的 headers,我 运行 以下内容:
blob.reload()
print(f"Content encoding: {blob.content_encoding}")
print(f"Content type: {blob.content_type}")
print(f"Cache control: {blob.cache_control}")
>> Content encoding: gzip
>> Content type: application/json
>> Cache control: no-transform
我不确定我还能尝试什么。
我复现了你的问题。我听从了您的输入并得到了类似的行为,因为我下载了一个文件名具有 .gz 扩展名的 gzip 存档。但是,gunzip
-ing 文件 returns 出错:
Example.json.gz: not in gzip format
解决方案是使用raw_download=True
下载原始gzip压缩文件,以防止发生解压转码。
示例:
blob.download_to_filename("test.json.gz", raw_download=True)