我有静态资产存储在GCS中,我想为它们提供gzip压缩(但它们是在没有压缩的情况下上传的)。有没有办法设置文件进行压缩而无需下载并以gzip格式重新上传?
我尝试使用gsutil设置内容编码标头(即gsutil setmeta -h 'Content-Encoding:gzip' <some_object_uri>
,但它只是导致文件上的服务不可用&#34;(我假设是来自尝试的服务器) ungzip文件并失败或类似的东西)。
答案 0 :(得分:4)
如果没有下载并重新上传,就无法压缩对象。
但是,您可以让gsutil为您执行此操作,如果您从Google Compute Engine(GCE)虚拟机(VM)运行它,则只需为操作计数付费,而不是为带宽付费。
另外,关于使用setmeta
设置内容编码标题,您对发生的事情的解释是正确的。您在对象上设置元数据以指示它包含gzip数据,但内容不包含有效的gzip流,因此当您尝试使用Accept-Encoding: gzip
下载时,GCS服务会尝试解压缩流并失败
我建议将存储桶下载到GCE VM上的本地磁盘:
gsutil cp -r gs://bucket /path/to/local/disk
然后,使用-z
选项指示gzip的文件扩展名:
gsutil cp -z js,css,html -r /path/to/local/disk gs://bucket