当前位置: 首页 > 知识库问答 >
问题:

Flysystem:Google云存储适配器-缓存控制

拓拔迪
2023-03-14

是否有一种方法来设置缓存控制元数据,同时将文件放入谷歌云存储使用谷歌云存储适配器Flysystem?

我的所有文件都公开在bucket中,但有时我需要更新一些文件,之后我仍然会看到旧文件。一般来说,我认为这是可能的,但我没有看到一种通过Flysystem实现这一点的方法,我们在任何地方都使用它。

共有3个答案

楚宇
2023-03-14

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

>

  • 手动在GSC sonsole上(每个文件中的编辑元数据)-如果您有大量的文件,则糟糕的解决方案

    使用gsutil上传

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

    更新元引用

     gsutil -m setmeta -h "Content-Type:text/html" \
      -h "Cache-Control:public, max-age=3600" \
      -h "Content-Disposition" gs://bucket/*.html
    

    使用API上传(PHP、Nodejs、Java、GO等)请参阅SDK文档-每种语言都有很多示例。

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

    [最佳选项]-创建并部署触发器脚本,该脚本将设置meta(或任何您想要的内容)https://googleapis.dev/nodejs/storage/latest/File.html)上传后立即(google.storage.object.finalize事件)

    创建包含两个文件索引的新文件夹。js和软件包。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'}); 
    };
    

    包裹json

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

    并分两步部署此功能

    >

     gcloud init
    

    部署(它将要求先启用api-遵循说明)

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

  • 章安易
    2023-03-14

    您可以在Google云存储对象上的Set Cache-Control php客户端的回复中找到设置缓存控制的PHP示例。

    公西季
    2023-03-14

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

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

    此外,您还可以在GCP控制台中设置云功能,以便在对象保存到桶中时设置头

     类似资料:
    • 注:在2.0.3以前有bug,请下载最新版本的CI。 CodeIgniter提供了多种目前业界流行的快速动态缓存组件的封装类。除了基于纯文本的缓存(文件缓存)外,其他缓存组件均需对服务器环境进行正确配置才能使用,否则程序会抛出致命异常(Fatal Exception)错误。 目录 用法举例 函数速查 支持的缓存适配器 Alternative PHP Cache (APC) 缓存 纯文本缓存 Mem

    • 32.6 配置缓存存储 开箱即用,缓存抽象提供了多种存储集成。要使用它们,需要简单地声明一个适当的CacheManager - 一个控制和管理Caches,可用于检索这些存储。 32.6.1 JDK ConcurrentMap-based Cache 基于JDK的Cache实现位于org.springframework.cache.concurrent包下。它允许使用ConcurrentHashM

    • 我们使用签名的URL从浏览器上传。我还不知道如何在上传时设置cache-control头。 我们使用gcloud-node库对URL进行签名:

    • 我试图理解DirectByteBuffer如何在Linux上工作,并编写了以下在strace下运行的非常简单的程序: 实际上,我期望一些mmap或sys\u brk系统调用直接从操作系统分配内存,但实际上它只是设置请求页面的读写保护。我的意思是: 这似乎是分配直接缓冲区比分配堆缓冲区慢的原因,因为每次分配都需要系统调用。 如果我错了,请纠正我,但是堆缓冲区分配(如果发生在TLAB内部)相当于返回一

    • 使用 rax-plugin-pwa 插件,可以方便快捷的使用 Service Worker 控制缓存,以获得更快的加载速度。 首先,安装 build-plugin-rax-pwa 插件依赖: $ npm install build-plugin-rax-pwa --save 在工程配置 build.json 中添加 pwa 插件并配置缓存目标: { "plugins": [ [