【问题标题】:Set Google Storage cache-control metadata to allow transform设置 Google Storage 缓存控制元数据以允许转换
【发布时间】:2020-02-17 10:45:57
【问题描述】:

希望每个人都做得很好。我正在使用谷歌存储实用程序将文件上传到启用 gzip 压缩的文件

gsutil -h 'Content-Type:application/json; charset=utf-8' -h 'Cache-Control:Cache-Control:public,max-age=3600' cp -z filejson gs://{bucket_name}/{id}/{id}/file.json 

默认情况下,当我使用此命令上传文件时,将文件元数据缓存控制设置为不转换。当我在客户端(如浏览器)上下载此文件时。我可以读取文件的内容。有什么方法可以允许转换为对象元数据。所以它会在客户端上正常工作。

【问题讨论】:

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


    【解决方案1】:

    来自Documentation

    这可以使用gsutil setmeta 来实现。 gsutil setmeta 命令允许您设置或删除一个或多个对象的元数据。

    默认情况下,公开可读的对象带有 Cache-Control 标头,允许此类对象缓存 3600 秒。有关此默认行为的更多详细信息,请参阅 gsutil 帮助元数据的 CACHE-CONTROL 部分。如示例所示:

     gsutil -h "Content-Type:text/html" \
           -h "Cache-Control:public, max-age=3600" cp -r images \
           gs://bucket/images
    

    另一方面,如果您需要确保更新立即可见,则应在此类上设置“Cache-Control:private, max-age=0, no-transform”的 Cache-Control 标头对象。您可以使用示例命令执行此操作:

    gsutil setmeta -h "Content-Type:text/html" \
      -h "Cache-Control:private, max-age=0, no-transform" gs://bucket/*.html
    

    您可以了解更多关于 Cache-Control here

    【讨论】:

    • 。如果问题是默认情况下使用 gsutil 添加到对象的非转换元数据。在每个对象上设置了 no-transform 。我正在寻找解决方法
    • 嗨@FahadAbid,据我了解,您的意思是您希望将公开可读的对象(请注意非公开数据不能缓存)缓存3600 秒。它是否正确?如果是这样,您将使用gsutil setmeta -h "Cache-Control:public, max-age=3600" 命令。可选:如果您有很多对象,您可以使用 -m 激活并行更新。否则,请告诉我。
    • 我的问题是上传文件的转换。我用-z(启用gzip)上传文本文件,但在客户端下载它是gzip,应该解压缩。元数据值 no-transform 告诉存储桶在下载时不要解压缩。
    • 如果文件以 gzip 压缩的对象存储在 Cloud Storage 上,它们可以在发送给请求者之前自动解压缩。为了符合解压缩转码的条件,您的文件必须满足以下条件:文件在存储在 Cloud Storage 中时经过 gzip 压缩,并且关联的元数据包括 Content-Encoding: gzip(您已经使用 -z范围)。如果这仍然不能解决您的问题,那么您将需要对已上传的对象使用 gsutil setmeta 命令修改元数据以修改“no-transform”。上面的链接。
    • 如果我的建议对您有所帮助,请考虑投票并将我的回答标记为已接受,以提高社区的知名度。谢谢@FahadAbid
    猜你喜欢
    • 2015-11-15
    • 2019-04-13
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2011-07-07
    • 2011-10-01
    相关资源
    最近更新 更多