【问题标题】:aspnet core - browser not showing download progress on File resultaspnet core - 浏览器未在文件结果中显示下载进度
【发布时间】: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 从不显示下载进度吗?

【问题讨论】:

    标签: c# asp.net-core model-view-controller webapi


    【解决方案1】:

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

    【讨论】:

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