GCS에서 캐시를 비활성화하고 싶습니다.

3687 단어 GCSC#ASP.NET_Core
GCS의 캐시 주위에서 조금 빠져서, 좀처럼 정보를 찾을 수 없었기 때문에 메모해 둡니다.

배경


  • 사용자의 이미지 아이콘을 GCS에 저장합니다
  • 저장된 이미지는 GCS에서 공개 링크로 만들어 이미지를 참조하여 웹 페이지로 표시됩니다.
  • 공개 링크로 했을 경우, 디폴트는 캐쉬가 3,600초 유효하게 된다

  • 이 상태에서 사용자의 이미지 아이콘을 변경했지만 당연히 이미지가 전환되지 않았습니다.
    캐시가 유효하므로 비활성화해야 합니다.

    [GCS 내용]


    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

    좋은 웹페이지 즐겨찾기