Edited at

GCSでキャッシュを無効にしたい

More than 1 year has passed since last update.

GCSのキャッシュ周りで少しハマって、なかなか情報が見つからなかったのでメモしておきます。


背景


  • ユーザーの画像アイコンをGCSへ保存している

  • 保存した画像はGCS上で公開リンクにし、画像参照してWebページ表示している

  • 公開リンクにした場合、デフォルトはキャッシュが3,600秒有効になる

この状態の時にユーザーの画像アイコン変更したのですが、当然なかなか画像が切り替わりませんでした。

キャッシュが効いてるため、無効にしてやる必要があります。

[ GCSの中身 ]

2018-04-18_12h02_461.png

Google Cloud Storageドキュメント - オブジェクトのメタデータ


解決策

以下は公開リンクにする処理ですが、その部分にキャッシュ無効の処理("no-cache")を追記しました。

これで公開リンクにしたと同時にキャッシュ対象外となり、即時の画像アイコン変更ができるようになりました。

using Google.Apis.Storage.v1.Data;

using Google.Cloud.Storage.V1;

private async Task PublicReadFileToGcs(string bucketName, string path, string fileName)
{
// Google Storage
var storage = await StorageClient.CreateAsync();
var storageObject = storage.GetObject(bucketName, $"{path}/{fileName}");
// キャッシュを無効にするように追加
storageObject.CacheControl = "no-cache";
storageObject.Acl = storageObject.Acl ?? new List<ObjectAccessControl>();
storage.UpdateObject(storageObject, new UpdateObjectOptions
{
PredefinedAcl = PredefinedObjectAcl.PublicRead
});
}

Google API ドキュメント - CacheControl