0
我正在上傳大文件(1-10 GB)到azure存儲並需要計算上傳時文件的SHA1哈希值。我能夠計算服務器上的SHA1,而無需下載文件?需要計算在c#中存儲在Azure存儲中的文件的SHA1哈希值
我正在上傳大文件(1-10 GB)到azure存儲並需要計算上傳時文件的SHA1哈希值。我能夠計算服務器上的SHA1,而無需下載文件?需要計算在c#中存儲在Azure存儲中的文件的SHA1哈希值
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);
}
}
對於大文件,在我的情況下,1GB blob,'DownloadToStreamAsync()'給出'System.OutOfMemoryException'。我們如何計算SHA1而不下載大文件/ blob? –
儘管寫了什麼,這個例子下載blob;它只是不寫入磁盤。 – JohnW