2016-07-15 26 views

回答

2

Azure Blob Storage在blob時自動支持blob的MD5哈希計算,請參閱以下內容Get Blob Properties

的Content-MD5

如果內容-MD5報頭已定爲團塊,則返回該響應首部,以便客戶端可以檢查消息內容的完整性。 在版本2012-02-12及更高版本中,即使放置Blob請求不包含MD5標頭,Put Blob也會設置塊Blob的MD5值。

因此,如果沒有特殊需求,就不必計算blob的SHA1哈希值。

作爲參考,下面是一個示例,它可以計算SHA1哈希而不下載存儲在存儲區中的Blob。

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("<StorageAccountConnectionString>"); 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobClient.GetContainerReference("<container-name>"); 
CloudBlockBlob blockBlob = container.GetBlockBlobReference("<blob-name>"); 
MemoryStream memStream = new MemoryStream(); 
await blockBlob.DownloadToStreamAsync(memoryStream); 
using (memStream) 
{ 
    using (SHA1Managed sha = new SHA1Managed()) 
    { 
     byte[] checksum = sha.ComputeHash(memStream); 
    } 
} 
+0

對於大文件,在我的情況下,1GB blob,'DownloadToStreamAsync()'給出'System.OutOfMemoryException'。我們如何計算SHA1而不下載大文件/ blob? –

+0

儘管寫了什麼,這個例子下載blob;它只是不寫入磁盤。 – JohnW