我必须使用Azure函数计算存储在Azure Blob存储帐户中的文件的MD5和SHA256。我尝试使用DownloadContent方法将文件下载到内存中,但是对于大文件(超过4GB),我的内存不足(我不得不扩大规模,这是昂贵的)。我发现了另一个方法DownloadStreaming,它可以很好地进行第一次计算(几乎没有额外的内存使用),但在计算第二次哈希之前,我必须再次下载文件,因为流是空的。我尝试在该流上调用Position = 0
,但我得到的异常类型不受支持。有没有办法使用DownloadStreaming而不重新下载文件?
下面是我使用的代码:
var sourceFile = await blobClient.DownloadStreamingAsync();
byte[] md5Result;
byte[] sha256Result;
using (var md5 = MD5.Create())
{
md5Result = md5.ComputeHash(sourceFile.Value.Content);
}
sourceFile = await blobClient.DownloadStreamingAsync();
using (var sha256 = SHA256.Create())
{
sha256Result = sha256.ComputeHash(sourceFile.Value.Content);
}
1条答案
按热度按时间gfttwv5a1#
您可以循环读取流,并手动使用
md5.TransformBlock
和sha256.TransformBlock
逐位计算哈希值。outputBuffer
给这个函数,你可以传递null
。TransformFinalBlock
。CancellationToken
。