使用带有进度的异步任务将文件字节上传到服务器会持续暂停网页线程

本文关键字:服务器 线程 网页 暂停 字节 文件 任务 异步 | 更新日期: 2023-09-27 18:36:12

我已经尝试了许多不同的变体来将文件上传到服务器并向用户显示进度。 它们在上传文件时都保持页面静止,然后在完成后,进度条显示其完成。 我需要帮助使异步方法正常工作。

选择文件并输入详细信息后,用户将按下上传按钮。 与数据库交互后,它将转到将文件复制到服务器。 但是,它会复制,直到完成才会报告进度。

byte[] bbb = fileMiscUploadPath.FileBytes;
DoCopy(UploadLocation, bbb);

async Task<Task> DoCopy(string UploadLocation, byte[] file)
{
    return Task.Run(() => Copier.UploadFileAsyncronous(UploadLocation, file, prog => UploadPercent = prog));
}

这是复印机类:

public class Copier
{
    public static async Task UploadFileAsyncronous(string UploadLocation, byte[] file, Action<int> progressCallback)
    {
        int count = 1;
        using (FileStream fs = File.OpenWrite(UploadLocation))
        {
            using (Stream input = new MemoryStream(file))
            {
                byte[] buffer = new byte[32 * 1024];
                int read;
                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fs.Write(buffer, 0, read);
                    count++;
                    progressCallback((int)((input.Position / input.Length))*100);
                }
            }
        }
    }
}

使用带有进度的异步任务将文件字节上传到服务器会持续暂停网页线程

在这种情况下,

服务器无法响应进度您需要使用客户端示例或类似的解决方案,但基于浏览器。