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