C# 内容下载两次,每次请求一次
我正在通过浏览器将大文件下载到客户端。当我开始下载时,内容会被写入正文。我看到在chrome中向用户传输,他们看不到进度。 一旦完成传输,并且下面的方法完成,您就可以看到文件正在下载。这似乎是双重工作 公共异步任务GetFile(字符串文件名、字符串文件令牌) {C# 内容下载两次,每次请求一次,c#,api,.net-core,C#,Api,.net Core,我正在通过浏览器将大文件下载到客户端。当我开始下载时,内容会被写入正文。我看到在chrome中向用户传输,他们看不到进度。 一旦完成传输,并且下面的方法完成,您就可以看到文件正在下载。这似乎是双重工作 公共异步任务GetFile(字符串文件名、字符串文件令牌) { Stream stream = null; int bufferSize = 1048576; byte[] buffer = new byte[bufferSize];
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();
}
}
}