如何解决Flysystem:Google云存储适配器-缓存控制
在使用Flysystem的Google Cloud Storage Adapter将文件放入Google Cloud Storage时,是否可以设置缓存控制元数据?
我所有的文件都存储在公共存储桶中,但是有时我需要更新一些文件,之后我仍然看到旧文件。我认为总的来说是有可能的,但是我没有看到Flysystem做到这一点的方法,我们在各处都使用它。
解决方法
Flysystem可以设置适配器配置。要为GCP存储桶设置缓存控制标头,可以使用next:
/** @var FilesystemInterface $storage */
$storage->put($path,$contents,[
'metadata' => [
'cacheControl' => 'no-cache,max-age=0'
]
]);
此外,您可以在GCP控制台中设置Cloud Function,以在将对象保存到存储桶时设置标头
,您可以在对Set Cache-Control php client on Google Cloud Storage Object的回复中找到一个设置缓存控制的PHP示例。
,有几种方法可以做到这一点
-
在 GSC 子底上手动操作(每个文件中的“编辑元数据”)-如果您有大量文件,这是一个糟糕的解决方案
-
使用 gsutil 上传
gsutil -m -D -h Cache-Control:"Cache-Control:public,max-age=31536000" cp -r <path to your folder> gs://yourbucketname/optionalfolder/
-
更新元reference
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 负载均衡器并设置自定义元字段 "Cache-Control" : "public,max-age=3600" 在这种情况下,您将拥有自己的 CDN 域名和灵活设置
-
[最佳选择] - 创建和部署触发脚本,该脚本将在上传后立即设置元(或任何您想要的 https://googleapis.dev/nodejs/storage/latest/File.html)(google.storage.object.finalize 事件)
创建包含两个文件 index.js 和 package.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"
}
}
并分两步部署此功能
-
安装和初始化云 (https://cloud.google.com/sdk/docs/install)
gcloud init
-
部署(它会要求先启用 api - 按照说明操作)
gcloud functions deploy prepare \ --runtime nodejs12 \ --trigger-resource gs://yourbacketname \ --trigger-event google.storage.object.finalize
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。