ядро ​​aspnet - браузер не показывает ход загрузки в результате файла

У меня есть простое веб-приложение, которое позволяет загружать файлы.
Файл загружается правильно, однако браузер никогда не указывает количество полученных данных (т. е. прогресс).

Он просто продолжает показывать 0,1 МБ, пока вдруг файл не будет загружен.
введите здесь описание изображения

Действие загрузки реализовано следующим образом — пока просто откройте-прочитайте локальный файл и верните поток как результат File.

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 никогда не показывает ход загрузки?


person Bartosz    schedule 04.01.2020    source источник


Ответы (1)


Ваш код должен помочь. Вы должны попробовать это с большим файлом (например: 200 МБ)? Это может быть причиной того, что для расчета ETA требуется больше времени, чем для его загрузки в локальной среде разработки.

person Eldar    schedule 04.01.2020
comment
Обратите внимание, что я устанавливаю заголовок длины содержимого вручную - и это, похоже, "работает", потому что, как только начинается загрузка, браузер знает, что общий размер будет 2,7 МБ... - person Bartosz; 04.01.2020
comment
@Bartosz, вы пробовали это с файлом большего размера (например: 200 МБ)? Это может быть причиной того, что для расчета ETA требуется больше времени, чем для его загрузки? - person Eldar; 04.01.2020
comment
Удивительно, но файл большего размера показывает прогресс... Примерно через минуту или две обработки. Очень странно, потому что загрузка 2,7 МБ также занимает довольно много времени (около 40 секунд). Спасибо! - person Bartosz; 04.01.2020
comment
Кроме того, просто для справки, при возврате 'this.File(System.File.IO.ReadAllBytes(path), "application/octet-stream", file.Name); полоса загрузки вообще не отображается, пока загрузка не будет завершена, т.е. выглядит так, как будто ничего не происходило какое-то время, и вдруг файл готов. - person Bartosz; 04.01.2020
comment
В любом случае, пожалуйста, обновите свой ответ до фактического решения (попробуйте файл большего размера, потому что код в порядке), и я приму его :) - person Bartosz; 04.01.2020