更新缓存控制后,将删除Blob内容类型

时间:2015-12-08 17:05:26

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

我有以下问题。最近我检查了我的网站的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();
    }
}

你能解释一下原因吗?

1 个答案:

答案 0 :(得分:0)

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

查看您的代码,您正在创建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();
            }
        }
    }