跟踪文件流中的写入数据,而不是读取数据



我正试图按照本指南使用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;    
}

如果没有这一点,文件系统可以自由地将数据保存在缓冲区中,直到您关闭文件。

请注意,重复刷新可能会增加上传的总时间。

相关内容

  • 没有找到相关文章

最新更新