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 进行实时重新加载?
在mac中找不到匹配命令“dotnet-aspnet-codegenerator”asp.net core 2.1项目的可执行文件
Swashbuckle.AspNet.Core:Swagger UI 显示空白页面 - 如何修复?