【问题标题】:Flysystem: Google Cloud Storage Adapter - cache-controlFlysystem:谷歌云存储适配器 - 缓存控制
【发布时间】:2020-09-16 14:49:20
【问题描述】:

有没有办法在使用 Google Cloud Storage Adapter for Flysystem 将文件放入 Google Cloud Storage 时设置缓存控制元数据?

我的存储桶中的所有文件都是公开的,但有时我需要更新一些文件,之后我仍然看到旧文件。我认为这是可能的,但我没有看到 Flysystem 有办法做到这一点,我们到处都在使用它。

【问题讨论】:

    标签: php google-cloud-storage flysystem


    【解决方案1】:

    Flysystem 能够设置适配器配置。要为 GCP 存储桶设置缓存控制标头,您可以使用 next:

    /** @var FilesystemInterface $storage */
    $storage->put($path, $contents, [
        'metadata' => [
            'cacheControl' => 'no-cache,max-age=0'
         ]
    ]);
    

    此外,您可以在 GCP 控制台中设置 Cloud Function 以在对象保存到存储桶时设置标头

    【讨论】:

      【解决方案2】:

      您可以在Set Cache-Control php client on Google Cloud Storage Object的回复中找到设置缓存控制的PHP示例。

      【讨论】:

        【解决方案3】:

        有几种方法可以做到这一点

        1. 在 GSC sonsole 上手动(每个文件中的“编辑元数据”) - 如果您有大量文件,这是一个不好的解决方案

        2. 使用 gsutil 上传

           gsutil -m -D -h Cache-Control:"Cache-Control:public, max-age=31536000" cp -r <path to your folder> gs://yourbucketname/optionalfolder/
          
        3. 更新元reference

           gsutil -m setmeta -h "Content-Type:text/html" \
            -h "Cache-Control:public, max-age=3600" \
            -h "Content-Disposition" gs://bucket/*.html
          
        1. 使用 API(PHP、Nodejs、Java、GO 等)上传。请参阅 SDK 文档 - 每种语言都有很多示例。

        2. 创建 Google 负载均衡器并设置自定义元字段“Cache-Control”:“public, max-age=3600” 在这种情况下,您将拥有自己的 CDN 域名和灵活的设置

        3. [最佳选项] - 创建和部署触发脚本,它将在上传后立即设置元(或任何你想要的 https://googleapis.dev/nodejs/storage/latest/File.html)(google.storage.object.finalize 事件)

        index.jspackage.json 两个文件创建新文件夹

        index.js

        enter const {Storage} = require('@google-cloud/storage');
        const storage = new Storage();
        
        exports.prepare = (file, context) => {
           console.log("prepare: set cache control:" + file.name);
           storage.bucket(file.bucket).file(file.name).setMetadata({cacheControl: 'public, max-age=31536000'}); 
        };
        

        package.json

        {
           "dependencies": {
                "@google-cloud/storage": ">=5.8.0"
           }
        }
        

        并分两步部署此功能

        1. 安装和初始化云 (https://cloud.google.com/sdk/docs/install)

           gcloud init
          
        2. 部署(它会首先要求启用 api - 按照说明进行操作)

           gcloud functions deploy prepare \
            --runtime nodejs12 \
            --trigger-resource gs://yourbacketname \
            --trigger-event google.storage.object.finalize
          

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-18
          • 2016-10-12
          相关资源
          最近更新 更多