Контент скачивается дважды по одному запросу - PullRequest
1 голос
/ 17 июня 2020

Я скачиваю большой файл клиенту через браузер. Когда я инициирую загрузку, содержимое записывается в тело. Я вижу передачу в chrome пользователю, который не видит прогресса. enter image description here

после завершения передачи и выполнения указанного ниже метода вы сможете увидеть загрузку файла. Похоже на двойную работу.

enter image description here

publi c asyn c Task GetFile (string fileName, string fileToken) {

        Stream stream = null;
        int bufferSize = 1048576;
        byte[] buffer = new byte[bufferSize];
        int length;
        long lengthToRead;

        try
        {
            string filePath = Path.Combine(_env.WebRootPath, $"Common{Path.DirectorySeparatorChar}", $"Files{Path.DirectorySeparatorChar}", fileToken);

            stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
            long dj = stream.Length / bufferSize;
            if (stream.Length % bufferSize > 0)
            {
                dj += 1;
            }



            dj = dj * bufferSize;
            lengthToRead = stream.Length;

            Response.ContentType = "application/pdf";
            Response.Headers.Add("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            Response.ContentLength = dj;

            while( lengthToRead > 0)
            {
                length = stream.Read(buffer, 0, bufferSize);

               await Response.BodyWriter.WriteAsync(buffer);

               await Response.BodyWriter.FlushAsync();

                lengthToRead = lengthToRead - length;


            }
        }
        catch(Exception exp)
        {
            Response.ContentType = "text/html";

        }
        finally
        {
            if(stream != null)
            {
                stream.Close();
            }
        }

    }
...