为了账号安全,请及时绑定邮箱和手机立即绑定

.NET Core 2.0 MVC 文件上传进度

.NET Core 2.0 MVC 文件上传进度

C#
森栏 2021-07-08 16:35:01
所以我花了很长时间试图为我的 .Net Core MVC 应用程序显示进度条,而官方文档并没有太大帮助。文档在这里:https : //docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view= aspnetcore-2.0#uploading-large-files-with- streaming我还想在文件到达我的控制器时将其上传到 Azure blob 存储。用户可以上传任意数量的文件。这是我的上传代码:for (int i = 0; i < videoFile.Count; i++)            {                long totalBytes = videoFile[i].Length;                byte[] buffer = new byte[16 * 1024];                using (Stream input = videoFile[i].OpenReadStream())                {                    long totalReadBytes = 0;                    int readBytes;                    while ((readBytes = input.Read(buffer, 0, buffer.Length)) > 0)                    {                        totalReadBytes += readBytes;                        var progress = (int)((float)totalReadBytes / (float)totalBytes * 100.0);                    }                }                String videoPath = videoFile[i].FileName;                await sc.UploadBlobAsync(groupContainer, videoPath, videoFile[i]);            }这是我的 UploadBlobAsync 方法:public async Task<bool> UploadBlobAsync(string blobContainer, string blobName, IFormFile file) {        CloudBlobContainer container = await GetContainerAsync(blobContainer);        CloudBlockBlob blob = container.GetBlockBlobReference(blobName);        CancellationToken cancellationToken = new CancellationToken();        IProgress<StorageProgress> progressHandler = new Progress<StorageProgress>(            progress => Console.WriteLine("Progress: {0} bytes transferred", progress.BytesTransferred)        );我想知道的是:据我了解,我必须做 2 个进度条,1 个用于客户端机器到我的服务器,而不是另一个从我的服务器到 azure。这样对吗?如何向前端显示每个文件的进度?我想这将是对我在控制器中设置的 List[i] 的 ajax 请求?当文件已经缓冲时,我是否正在读取 while 循环中的字节?如果我可以访问文件流,文件不是已经缓存在服务器上了吗?当结果发生变化时,如何利用 Azure 的 IProgress 实现将结果返回给我?Console.Writeline 似乎不起作用。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信