【问题标题】:Blob content-types are erased after updating cache-control更新缓存控制后删除 Blob 内容类型
【发布时间】:2015-12-08 17:05:25
【问题描述】:

我有以下问题。最近我检查了我网站的 Google Pagespeed 并决定为我的所有 blob(图像)设置缓存控制。

在我这样做之后,我注意到图像响应不再包含任何内容类型,这些内容类型已被删除。

这是我的代码的摘录:

public Microsoft.WindowsAzure.StorageClient.CloudBlobContainer container;        
public String cacheControl = "public, max-age=604800";
var options = new Microsoft.WindowsAzure.StorageClient.BlobRequestOptions();
options.UseFlatBlobListing = true;

var blobInfos = container.ListBlobs(options);

foreach (var blobInfo in blobInfos)
{        
    var blob = container.GetBlobReference(blobInfo.Uri.ToString());

    if (blob is Microsoft.WindowsAzure.StorageClient.CloudBlob)
    {
        blob.Properties.CacheControl = cacheControl;                    
        blob.SetProperties();
    }
}

你能解释一下原因吗?

【问题讨论】:

    标签: azure blob containers content-type cache-control


    【解决方案1】:

    这是预期的行为。当您设置属性时,任何未定义的属性都将设置为其默认值(即空)。

    查看您的代码,您正在创建一个 CloudBlockBlob 对象的新实例,默认情况下它的所有属性都设置为 null(或空字符串),并且您只设置了缓存控制属性。

    您应该简单地将 blobInfo 转换为 CloudBlob 并更新其属性,而不是创建新的 CloudBlob 实例。

    我还注意到您使用的是旧版本的存储客户端库。我建议升级到最新版本。这是我编写的一些代码,它使用最新版本并执行相同的操作。

        static void PreserveProperties()
        {
            var account = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
            var blobClient = account.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("images");
            var blobs = container.ListBlobs(null, true);
            foreach (var blob in blobs)
            {
                var cloudBlob = blob as Microsoft.WindowsAzure.Storage.Blob.CloudBlob;
                if (cloudBlob != null)
                {
                    cloudBlob.Properties.CacheControl = "public, max-age=604800";
                    cloudBlob.SetProperties();
                }
            }
        }
    

    【讨论】:

    • "查看您的代码,您正在创建 CloudBlockBlob 的新实例" 哪一行?
    • 这个 - var blob = container.GetBlobReference(blobInfo.Uri.ToString());。 HTH。
    • 现在明白了!谢谢!
    猜你喜欢
    • 2021-02-27
    • 2020-07-22
    • 2022-11-11
    • 2022-01-13
    • 2012-07-16
    • 2019-08-10
    • 2021-09-17
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多