raj*_*ola 4 c# azure azure-storage azure-blob-storage
我正在将大文件(1-10 GB)上传到azure存储,并且需要在上传时计算文件的SHA1哈希值。我是否可以在服务器上计算 SHA1,而无需下载文件?
Azure Blob 存储支持在放入 blob 时自动对 blob 进行 MD5 哈希计算,请参见Get Blob Properties.
\n\n\n内容-MD5
\n\n如果已为 blob 设置了 Content-MD5 标头,则会返回此响应标头,以便客户端可以检查消息内容完整性。\n 在版本 2012-02-12 及更高版本中,Put Blob 设置块 blob\xe2\ x80\x99s MD5 值,即使 Put Blob 请求不\xe2\x80\x99t 包含 MD5 标头也是如此。
\n
因此,如果没有特殊需要,则无需计算 blob 的 SHA1 哈希值。
\n\n作为参考,这里是一个计算 SHA1 哈希值的示例,无需下载存储在存储中的 blob。
\n\nCloudStorageAccount storageAccount = CloudStorageAccount.Parse("<StorageAccountConnectionString>");\nCloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();\nCloudBlobContainer container = blobClient.GetContainerReference("<container-name>");\nCloudBlob blob = container.GetBlobReference("<blob-name>");\n\nusing(Stream blobStream = blob.OpenRead())\n{\n using (SHA1 sha1 = SHA1.Create())\n {\n byte[] checksum = sha1.ComputeHash(blobStream);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nCloudStorageAccount storageAccount = CloudStorageAccount.Parse("<StorageAccountConnectionString>");\nCloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();\nCloudBlobContainer container = blobClient.GetContainerReference("<container-name>");\nCloudBlob blob = container.GetBlobReference("<blob-name>");\n\nusing(Stream blobStream = await blob.OpenReadAsync().ConfigureAwait(false))\n{\n using (SHA1 sha1 = SHA1.Create())\n {\n byte[] checksum = await sha1.ComputeHashAsync(blobStream);\n }\n}\n\n// ComputeHashAsync extension method from https://www.tabsoverspaces.com/233439-computehashasync-for-sha1\npublic static async Task<Byte[]> ComputeHashAsync(this HashAlgorithm algo, Stream stream, Int32 bufferSize = 4096)\n{\n algo.Initialize();\n\n var buffer = new byte[bufferSize];\n var streamLength = inputStream.Length;\n while (true)\n {\n var read = await inputStream.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);\n if (inputStream.Position == streamLength)\n {\n algo.TransformFinalBlock(buffer, 0, read);\n break;\n }\n algo.TransformBlock(buffer, 0, read, default(byte[]), default(int));\n }\n\n return algo.Hash;\n} \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
6507 次 |
| 最近记录: |