aspnet core - 浏览器未在文件结果中显示下载进度

Posted

技术标签:

【中文标题】aspnet core - 浏览器未在文件结果中显示下载进度【英文标题】:aspnet core - browser not showing download progress on File result 【发布时间】:2020-01-04 13:15:30 【问题描述】:

我有一个简单的网络应用程序,它允许下载文件。 该文件已正确下载,但浏览器从不指示接收到的数据量(即进度)。

它一直显示 0.1 MB,直到文件突然被下载。

下载动作的实现如下 - 现在,只需打开读取本地文件并将流作为文件结果返回。

public async Task<IActionResult> Download(string id)

    var project = await this.service.GetById(id).ConfigureAwait(false);
    if (project == null)
    
        return this.NotFound($"Project [id] does not exist");
    
    var file = new FileInfo(project.DownloadLocation);
    this.Response.ContentLength = file.Length;
    return this.File(file.OpenRead(), "application/octet-stream", file.Name);

下载由一个简单的动作链接触发:

 <dd class="project-path">@html.ActionLink("Here",  "Download", "Download", new  id = Model.Id)</dd>

知道为什么 Chrome/Firefox 从不显示下载进度吗?

【问题讨论】:

【参考方案1】:

您的代码应该可以解决问题。您应该尝试使用更大的文件(例如:200mb)吗?这可能是计算 ETA 所花费的时间比在本地开发环境中下载更多的原因。

【讨论】:

请注意,我正在手动设置内容长度标头 - 它似乎“工作”,因为一旦下载开始,浏览器就会知道总大小将为 2.7 MB。 .. @Bartosz 您是否尝试过使用更大的文件(例如:200mb)?这可能是计算 ETA 所花费的时间超过下载时间的原因? 令人惊讶的是,更大的文件显示了进度......经过大约一两分钟的处理。很奇怪,因为 2.7MB 的下载也需要相当长的时间(大约 40 秒)。谢谢! 另外,为了记录,返回 'this.File(System.File.IO.ReadAllBytes(path), "application/octet-stream", file.Name); 在下载完成之前根本不显示下载栏 - 即看起来好像没有发生很长时间,突然文件准备好了。 无论如何,请将您的答案更新为实际解决方案(尝试更大的文件,因为代码很好),我会接受它:)

以上是关于aspnet core - 浏览器未在文件结果中显示下载进度的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用进程内 aspnet core 3 进行实时重新加载?

Jquery 对话框未在 aspnet MVC 中加载

在mac中找不到匹配命令“dotnet-aspnet-codegenerator”asp.net core 2.1项目的可执行文件

Swashbuckle.AspNet.Core:Swagger UI 显示空白页面 - 如何修复?

“wwwroot”文件夹中的某些文件未在 ASP.NET Core Web 部署中发布

Microsoft.AspNet.WebApi.Core 和过时的库