SignalR 文件传输状态检查

问题描述 投票:0回答:1

我正在开发一个新的网络应用程序,使用户能够将大文件上传到服务器。这不是生产级应用程序。 我为此使用 blazor 服务器端模式,但我无法找到向用户显示上传百分比的方法。任何想法或建议都将受到高度赞赏。

我正在使用输入文件从浏览器中选择文件。 这是服务器代码。

   string safeFileName = WebUtility.HtmlEncode(file.Name);

   var path = Path.Combine(env.ContentRootPath, "files", safeFileName);
   await using FileStream fs = new(path, FileMode.Create);
   await file.OpenReadStream(maxFileSize).CopyToAsync(fs);
c# .net signalr blazor-server-side
1个回答
0
投票

我就是这样做的。我正在循环中计算百分比,并手动将字节从一个流复制到另一个流。

string safeFileName = WebUtility.HtmlEncode(file.Name);

long size = file.Size;

// Save file locally
var path = Path.Combine(env.ContentRootPath, "files", safeFileName);
await using FileStream fs = new(path, FileMode.Create);

var inputstream = file.OpenReadStream(maxFileSize);

await file.OpenReadStream(maxFileSize).CopyToAsync(fs);

byte[] buffer = new byte[bufferSize];
int bytesRead;
long readAmount = 0;
do
{
    Array.Clear(buffer);
    bytesRead = await inputstream.ReadAsync(buffer, 0, bufferSize);
    await fs.WriteAsync(buffer, 0, bytesRead);
    readAmount += bytesRead;
    percentage = readAmount * 100 / size;
    StateHasChanged();

    System.Diagnostics.Debug.WriteLine(percentage);

} while (bytesRead > 0);
© www.soinside.com 2019 - 2024. All rights reserved.