Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# aspnet core-浏览器未显示文件结果的下载进度_C#_Asp.net Core_Model View Controller_Webapi - Fatal编程技术网

C# aspnet core-浏览器未显示文件结果的下载进度

C# aspnet core-浏览器未显示文件结果的下载进度,c#,asp.net-core,model-view-controller,webapi,C#,Asp.net Core,Model View Controller,Webapi,我有一个简单的web应用程序,可以下载文件。 文件下载正确,但浏览器从不显示收到的数据量(即进度) 它一直显示0.1 MB,直到文件突然下载。 下载操作的实现如下-现在,只需打开读取本地文件并将流作为文件结果返回即可 public async Task<IActionResult> Download(string id) { var project = await this.service.GetById(id).ConfigureAwait(false); if

我有一个简单的web应用程序,可以下载文件。
文件下载正确,但浏览器从不显示收到的数据量(即进度)

它一直显示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);
}
公共异步任务下载(字符串id)
{
var project=wait this.service.GetById(id).configurewait(false);
如果(项目==null)
{
返回此.NotFound($“项目[{id}]不存在”);
}
var file=newfileinfo(project.DownloadLocation);
this.Response.ContentLength=file.Length;
返回此.File(File.OpenRead(),“应用程序/八位字节流”,File.Name);
}
下载由一个简单的操作链接触发:

 <dd class="project-path">@Html.ActionLink("Here",  "Download", "Download", new { id = Model.Id})</dd>
@Html.ActionLink(“在这里”,“下载”,“下载”,新的{id=Model.id}”)

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

你的代码应该能做到这一点。你应该用更大的文件(例如:200mb)试试吗?这可能是计算ETA所需时间比在本地开发环境中下载要多的原因。

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