跟踪写入数据而不是文件流中的读取数据
Track writen data instead of read data in a file stream
我正在尝试按照本指南使用 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;
}
如果没有这个,文件系统可以自由地将数据保存在缓冲区中,直到您关闭文件。
请注意,反复刷新可能会增加上传的总时间。
我正在尝试按照本指南使用 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;
}
如果没有这个,文件系统可以自由地将数据保存在缓冲区中,直到您关闭文件。
请注意,反复刷新可能会增加上传的总时间。