【问题标题】:Set Cache-Control on Google Cloud Storage bucket在 Google Cloud Storage 存储桶上设置 Cache-Control
【发布时间】:2014-08-20 13:46:27
【问题描述】:

我有一个包含频繁更新的公共图像的存储桶,我想禁用默认的缓存持续时间 3600。(例如“Cache-Control:private, max-age=0, no-transform”)

可以在使用 PHP 上传文件时在文件上设置 Cache-Control 吗?

有没有办法为存储桶中的所有未来文件设置默认的缓存控制(比如所有文件都是公共的 ACL)?

目前我只能使用 gsutil 设置它的 Cache-Control,并且只能用于当前存储的文件。

【问题讨论】:

标签: php google-app-engine caching google-cloud-storage


【解决方案1】:

您可以在上传对象时设置 Cache-Control - 我建议您使用 gsutil -D 查看它为此生成的请求示例,然后将其转换为 PHP:

gsutil -D -h Cache-Control:"Cache-Control:private, max-age=0, no-transform" \
    cp file gs://your-bucket/file

无法为存储桶设置默认的 Cache-Control。

【讨论】:

  • 谢谢!但我认为命令中有错字。 -D 标志让我认为在服务器上设置 Cache-Control(使用 PHP)的唯一解决方案是通过 JSON PATCH 请求到云存储。
  • @mike-schwartz 有没有可以设置默认值的计划?就像我们可以设置默认权限一样...
  • @Jaap - 抱歉,目前没有计划添加设置默认缓存控制的功能。
  • @mike-schwartz,我在使用签名网址上传期间指定缓存控制时遇到了麻烦。stackoverflow.com/questions/33223966/…
  • 不幸的是,我不熟悉 gcloud-node 库。您可以尝试在这个 stackoverflow 问题中添加一个 gcloud-node 标记,这样更了解该库的人可能会看到它。
【解决方案2】:

这是我在找到您的问题后创建的示例。在下面我希望我上传的文件不被缓存:

$this->bucket->upload(
  $content,
  [
    'name' => $name,
    'metadata' => [
      'cacheControl' => "public, max-age=0"
    ]
  ]
);

我通过以下方式解决了这个问题:

  1. 去回购:https://github.com/googleapis/google-cloud-php-storage
  2. 这导致官方文档:https://cloud.google.com/storage/docs
  3. 我找到了 PHP 参考:https://googleapis.github.io/google-cloud-php/#/docs/google-cloud/v0.122.0/storage/storageclient
  4. 其中包含存储桶的upload 参考:https://googleapis.github.io/google-cloud-php/#/docs/google-cloud/v0.122.0/storage/bucket?method=upload
  5. 建议对元数据使用 JSON API 参考https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body
  6. 链接到用于缓存控制的 rfc 规范文档https://www.rfc-editor.org/rfc/rfc7234#section-5.2

以上所有内容都是有用的资源,但希望我的回答对未来的“Google 员工”来说更加简洁。

【讨论】:

  • 轰隆隆。现在使用'cacheControl' => "public, max-age=0" 进行即时更新。谢谢。
猜你喜欢
  • 2015-11-20
  • 2017-10-03
  • 1970-01-01
  • 2018-06-18
  • 2019-12-29
  • 1970-01-01
  • 2014-10-09
  • 2015-02-15
  • 1970-01-01
相关资源
最近更新 更多