2015-12-08 112 views
1

我有以下問題。最近我檢查了我的網站的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(); 
    } 
} 

你能解釋一下爲什麼嗎?

回答

0

這是預期的行爲。在設置屬性時,任何未定義的屬性都將設置爲其默認值(即空)。

看着你的代碼,你正在創建一個新的CloudBlockBlob對象實例,默認情況下它的所有屬性都設置爲null(或空字符串),而你只設置了cache-control屬性。

您應該簡單地將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(); 
      } 
     } 
    } 
+0

「看着你的代碼,你正在創建一個CloudBlockBlob的新實例」哪一行? –

+0

這一個 - 'var blob = container.GetBlobReference(blobInfo.Uri.ToString());'。 HTH。 –

+0

現在有道理!謝謝! –