14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-18

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

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?