2016-07-15 41 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