在 Google Cloud Storage 存储桶上设置缓存控制

Max*_*son 6 php google-app-engine caching google-cloud-storage

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

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

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

现在我只能使用 gsutil 将它设置为缓存控制,并且只能用于当前存储的文件。

Dja*_*ave 6

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

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

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

  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 员工”来说会更加简洁。


Mik*_*rtz 4

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

gsutil -D -h Cache-Control:"Cache-Control:private, max-age=0, no-transform" \
    cp file gs://your-bucket/file
Run Code Online (Sandbox Code Playgroud)

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