【发布时间】:2018-07-31 13:10:37
【问题描述】:
我正在构建一个 ASP.NET Core 应用程序,它需要处理高达 200GB 的大文件上传。我的目标是将这些文件写入磁盘并同时捕获 MD5 哈希。
我已经完成并创建了自己的方法来识别来自 HTTP 客户端请求的文件流,如 Uploading large files with streaming 中所述。找到流后,我将使用以下代码写入磁盘并创建 MD5 哈希。
// removed the curly brackets from using statements for readability on Stack Overflow
var md5 = MD5.Create();
using (var targetStream = File.OpenWrite(pathAndFileName))
using (var cryptoStream = new CryptoStream(targetStream, md5, CryptoStreamMode.Write))
using (var sourceStream = fileNameAndStream.FileStream)
{
await sourceStream.CopyToAsync(cryptoStream);
}
var hash = md5.Hash;
md5.Dispose();
很棒的是上面的工作(文件创建和哈希生成)。不太棒的是我不完全理解它是如何工作的:
-
cryptoStream是否被复制到targetStream,然后写入到targetStream? -
cryptoStream是将字节保存在内存中还是只是在它们经过时读取它们? -
cryptoStream和targetStream是否异步发生? - 还是异步复制到
cryptoStream,同步写入到targetStream?
我很高兴这行得通,但在没有完全理解的情况下,我担心我引入了一些邪恶的东西。
【问题讨论】:
标签: c# asp.net-core async-await md5 filestream