Google cloud storage 允许在现有文件上使用gzip

Google cloud storage 允许在现有文件上使用gzip,google-cloud-storage,Google Cloud Storage,我将静态资产存储在GCS中,我希望通过gzip为它们提供服务(但它们是在没有压缩的情况下上传的)。有没有办法将文件设置为压缩,而无需下载并重新上传Gzip格式的文件 我尝试用gsutil设置内容编码头(即,gsutil setmeta-h'content encoding:gzip'),但这只会导致文件上出现“服务不可用”(我假设这是来自试图解压缩文件的服务器,失败或类似的情况).如果不下载并重新上载对象,则无法压缩对象 但是,您可以让gsutil为您执行此操作,如果您从Google Compu

我将静态资产存储在GCS中,我希望通过gzip为它们提供服务(但它们是在没有压缩的情况下上传的)。有没有办法将文件设置为压缩,而无需下载并重新上传Gzip格式的文件


我尝试用gsutil设置内容编码头(即,
gsutil setmeta-h'content encoding:gzip'
),但这只会导致文件上出现“服务不可用”(我假设这是来自试图解压缩文件的服务器,失败或类似的情况).

如果不下载并重新上载对象,则无法压缩对象

但是,您可以让gsutil为您执行此操作,如果您从Google Compute Engine(GCE)虚拟机(VM)运行它,您将只收取操作计数费用,而不收取带宽费用

另外,关于使用
setmeta
设置内容编码头,您对发生的事情的解释是正确的。您在对象上设置元数据以指示它包含gzip数据,但内容不包含有效的gzip流,因此当您尝试使用
接受编码:gzip
下载它时,GCS服务器vice试图解压缩流,但失败了

我建议将bucket下载到GCE虚拟机上的本地磁盘:

gsutil cp -r gs://bucket /path/to/local/disk
然后,使用
-z
选项指示gzip的文件扩展名:

gsutil cp -z js,css,html -r /path/to/local/disk gs://bucket

嗯,我想我可以利用对象通知API来下载,然后每次重新上传一个gzip文件(因为我通过应用程序引擎blobstore处理程序接受文件)。