gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:32:35 25 4
gpt4 key购买 nike

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

你能解释一下为什么吗?

最佳答案

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

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

关于azure - 更新缓存控制后,Blob 内容类型将被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com