2015-04-23 72 views
0

的時候所以我複製一個blob blob和覆蓋另一個BLOB newBlob用下面的代碼在新斑塊被覆蓋:是否有可能迫使蔚藍BLOB元數據複製

CopyStatus copy = CopyStatus.Pending; 
while (copy != CopyStatus.Success) 
{ 
    newBlob.StartCopyFromBlob(blob); 
    copy = manager.CheckIsDoneCopying(newBlob, container.Name); 
} 

newBlob上已經有元數據之前複製和從here我看到:

如果沒有指定名稱 - 值對,該操作將在 源BLOB元數據複製到目標斑點。如果指定了一個或多個 名稱/值對,則將使用指定的元數據創建目標blob,並且不會從源 blob複製元數據。

我收集的意思是舊的blob元數據不會被複制過來。我想迫使原有的斑點覆蓋newBlob's元數據,然後使用編輯newBlobs元以下:

newBlob.FetchAttributes(); 
if (newBlob.Metadata.ContainsKey(StorageManager.IsLive)) 
{ 
     newBlob.Metadata[StorageManager.IsLive] = "Y"; 
} 
else 
{ 
     newBlob.Metadata.Add(new KeyValuePair<string, string>(StorageManager.IsLive, "Y")); 
} 
if (newBlob.Metadata.ContainsKey(StorageManager.LastUploadedTime)) 
{ 
     newBlob.Metadata[StorageManager.LastUploadedTime] = uploadedTime.Ticks.ToString(); 
} 
else 
{ 
     newBlob.Metadata.Add(new KeyValuePair<string, string>(StorageManager.LastUploadedTime, uploadedTime.Ticks.ToString())); 
} 

是否有可能迫使newblobs元數據的覆蓋從舊的BLOB?

編輯

如果我添加一行來我的代碼:

CopyStatus copy = CopyStatus.Pending; 
    newBlob.Metadata.Clear(); 
    while (copy != CopyStatus.Success) 
    {... 

元數據被複制。雖然這不可能是複製操作失敗或永不完成的唯一方式,但這意味着我有一個無效的newBlob。必須有比這更好的方法嗎?

回答

1

不,在執行newBlob.StartCopyFromBlob(blob)之前調用newBlob.Metadata.Clear()並不意味着在服務器端清除newBlob的元數據,然後開始異步blob複製。要清楚,newBlob.Metadata.Clear()不會觸發真正的請求到服務器,除非您再調用newBlob.SetMetadata()。

實際上,在執行newBlob.StartCopyFromBlob(blob)之前調用newBlob.Metadata.Clear()恰好意味着「沒有在CopyBlob請求中指定任何鍵值對」,這是您從MSDN網頁上看到的。

因此,您的解決方案只是您所期望的完美解決方案,請再次驗證! :)

相關問題