Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@naotaro0123

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

More than 3 years have 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

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
naotaro0123
Webエンジニアです。BlenderとWebGLと漫画が大好きです ◆ソース http://github.com/naotaro0123

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?