2014-10-30 61 views
0

我想使用Azure REST API在Azure上的Blob上設置一些自定義元數據屬性。 該文件的上傳工作正常(也通過REST API完成)。要設置我的自定義元數據,我跟着these instructions。樣品URL可以是:通過REST API在BlockBlob上設置Azure元數據

(PUT方法) https://myaccount.blob.core.windows.net/ph0wzj1k4dbuwfusyqw38z2jgfk5p56bfnlj5/a5bc77a8d4d34edeb6d3212fc6bbd8a9.jpg?sv=2014-02-14&sr=c&si=BlobContainer&sig=someSignaturecomp=metadata

與此請求頭:

X-MS-元logicalname:20141028_064011.jpg

無論我通過運行此URL jQuery的ajax或通過Fiddler我總是得到相同的結果:調用似乎是成功的(我得到一個200狀態碼),但如果我檢查blob元數據(使用C#代碼)沒有找到密鑰,元數據是空的。相反,如果我用C#做所有事情,我可以根據需要設置和獲取我的blob上的任何元數據。

樣品C#代碼(現在的工作):

var blobs = container.ListBlobs(null, true, BlobListingDetails.Metadata).Cast<CloudBlockBlob>(); 
foreach (var blob in blobs) { 
    Console.WriteLine(blob.Metadata["logicalname"]); 
} 

正如你可以看到我已經在網址中輸入我的共享訪問簽名,而不是在請求頭作爲本說明書顯示,但我懷疑這是問題,因爲上傳和其他操作(也在桌面存儲)一切工作正常。

我做錯了什麼? (?顯然是肯定的,但什麼...... :))

解決:

與Azure存儲資源管理器調查我看到的元數據的設置是否正確,並在那裏,它只是不通過C#中檢索。 Thanx對Gaurav的建議我編輯了我發佈的C#代碼示例,現在正在檢索通過REST API設置的元數據。

+0

你可以分享通過C#獲取blob元數據的代碼嗎? – 2014-10-30 11:17:23

+0

使用C#示例編輯帖子 – 2014-10-30 11:22:39

回答

1

元數據存在但您無法看到它,因爲您沒有獲取它。你可以做的是改變ListBlobs()電話。您正在使用最新版本的存儲客戶端庫的假設,你可以這樣做:

var blobs = container.ListBlobs(null, true, BlobListingDetails.Metadata).Cast<CloudBlockBlob>(); 

這將填充元數據與其他屬性一起。

+0

我再次編輯了我的帖子。我使用Azure存儲瀏覽器進行了調查,其值實際上存在,但即使使用您的方法,C#檢索到的元數據仍爲空。至少現在我知道價值確定了,我會繼續調查。當然,如果你有其他建議,歡迎:) – 2014-10-30 11:41:20

+0

好的解決了,不再需要執行GetBlockBlobReference來獲取元數據。我已經編輯了我的C#示例代碼 – 2014-10-30 11:46:19

相關問題