我正试图按照本指南使用blazor服务器端制作进度条
https://www.meziantou.net/file-upload-with-progress-bar-in-blazor.htm
然后我想把文件写入文件系统,问题是读取它比实际写入磁盘快得多,这意味着在大文件中,它似乎在相当长的一段时间内都停留在100%。
所以我可以让它跟踪它在磁盘上写了多少。或者它们可能是同步的。
await using FileStream fs = new(path, FileMode.Create);
using var stream = file.OpenReadStream(maxFileSize);
while (await stream.ReadAsync(buffer) is int read && read > 0)
{
//Writing to disk
await fs.WriteAsync(buffer.AsMemory(0, read));
//Updating how much data has been read
uploadedFiles[startIndex].UploadedBytes += read;
}
编辑:在尝试了答案之后,它变得更有意义了,因为我使用的是azure文件共享。这方面有些延迟。直接在文件上检查文件大小会给我正确的进度,但速度有点慢。
我想我会在传输到fileShare之前将文件存储在本地。或者考虑blobStorage转移。
阅读和写作已经交错进行。
唯一可能有帮助的是刷新:
while (await stream.ReadAsync(buffer) is int read && read > 0)
{
//Writing to disk
await fs.WriteAsync(buffer.AsMemory(0, read));
// Force the actual writing
await fs.FlushAsync();
//Updating how much data has been read
uploadedFiles[startIndex].UploadedBytes += read;
}
如果没有这一点,文件系统可以自由地将数据保存在缓冲区中,直到您关闭文件。
请注意,重复刷新可能会增加上传的总时间。