Rez*_*azi 5 google-cloud-storage
有什么方法可以设置存储桶的默认缓存控件(public, max-age=3600
每次创建新对象时都尝试覆盖存储桶级别)
类似于defacl,但设置缓存控件
小智 18
如果有人仍在寻找答案,则需要在添加 blob 时设置元数据。对于那些谁想要更新在桶中的所有现有对象的元数据,你可以使用setmeta
从gsutil
- https://cloud.google.com/storage/docs/gsutil/commands/setmeta
您只需要执行以下操作:
gsutil setmeta -r -h "Cache-control:public, max-age=12345" gs://bucket_name
Run Code Online (Sandbox Code Playgroud)
可以编写Google Cloud Storage Trigger。
此函数为存储桶中的每个新对象设置Cache-Control元数据字段:
from google.cloud import storage
CACHE_CONTROL = "private"
def set_cache_control_private(data, context):
"""Background Cloud Function to be triggered by Cloud Storage.
This function changes Cache-Control meta data.
Args:
data (dict): The Cloud Functions event payload.
context (google.cloud.functions.Context): Metadata of triggering event.
Returns:
None; the output is written to Stackdriver Logging
"""
print('Setting Cache-Control to {} for: gs://{}/{}'.format(
CACHE_CONTROL, data['bucket'], data['name']))
storage_client = storage.Client()
bucket = storage_client.get_bucket(data['bucket'])
blob = bucket.get_blob(data['name'])
blob.cache_control = CACHE_CONTROL
blob.patch()
Run Code Online (Sandbox Code Playgroud)
您还需要一个requirements.txt文件,用于在同一目录中导入存储。在需求中有google-cloud-storage软件包:
google-cloud-storage==1.10.0
Run Code Online (Sandbox Code Playgroud)
您必须将功能部署到特定存储桶:
gcloud beta functions deploy set_cache_control_private \
--runtime python37 \
--trigger-resource gs://<your_bucket_name> \
--trigger-event google.storage.object.finalize
Run Code Online (Sandbox Code Playgroud)
出于调试目的,您还可以使用gcloud命令检索日志:
gcloud functions logs read --limit 50
Run Code Online (Sandbox Code Playgroud)
无法指定默认缓存控制。必须在创建对象时设置。
我知道这是一个很老的问题,并且您正在执行默认操作(我不确定是否存在),但是在经历了很多挫折之后,以下内容在最近的 PHP 项目中为我工作:
$object = $bucket->upload($tempFile, [
'predefinedAcl' => "PUBLICREAD",
'name' => $destination,
'metadata' => [
'cacheControl' => 'Cache-Control: private, max-age=0, no-transform',
]
]);
Run Code Online (Sandbox Code Playgroud)
同样可以应用于节点:
const storage = new Storage();
const bucket = storage.bucket(BUCKET_NAME);
const blob = bucket.file(FILE_NAME);
const uploadProgress = new Promise((resolve, reject) => {
const blobStream = blob.createWriteStream();
blobStream.on('error', err => {
reject(err);
throw new Error(err);
});
blobStream.on('finish', () => {
resolve();
});
blobStream.end(file.buffer);
});
await uploadProgress;
if (isPublic) {
await blob.makePublic();
}
blob.setMetadata({ cacheControl: 'public, max-age=31536000' });
Run Code Online (Sandbox Code Playgroud)
使用 gsutil
- -h:允许您指定某些 HTTP 标头
- -r : 递归
- -m:执行一系列可能运行得更快的 gsutil 操作。
gsutil -m setmeta -r -h "Cache-control:public, max-age=259200" gs://bucket-name
归档时间: |
|
查看次数: |
2032 次 |
最近记录: |