ASP.NET 下载大文件(分块下载)
2021-02-20 07:42
标签:context htm 取数据 load 内存 释放 加载 class 客户 直接上代码: ASP.NET 下载大文件(分块下载) 标签:context htm 取数据 load 内存 释放 加载 class 客户 原文地址:https://www.cnblogs.com/luzm/p/12922228.htmlvar filePath = @"D:\Download\测试文档.xlsx";//要下载的文件地址,这个文件会被分成片段,通过循环逐步读取到ASP.NET Core中,然后发送给客户端浏览器
var fileName = Path.GetFileName(filePath);//测试文档.xlsx
int dataBufferSize = 50 * 1024 * 1024; //每次分批加载的50m
var response = HttpContext.Current.Response; //上下文的HttpResponse
response.Headers.Add("ContentType", "application/octet-stream");
var contentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName
};
response.Headers.Add("Content-Disposition", contentDisposition.ToString());
//分块下载
using (FileStream fs = new FileStream(targetFile, FileMode.Open, FileAccess.Read))
{
long contentLength = stream.Length; //获取数据流的大小
byte[] buffer;
long hasRead = 0;//变量hasRead用于记录已经发送了多少字节的数据到客户端浏览器
response.Clear();
//如果hasRead小于contentLength,说明下载文件还没读取完毕,继续循环读取下载文件的内容,并发送到客户端浏览器
while (hasRead contentLength)
{
if (!response.IsClientConnected)
{
//如果客户端浏览器中断了到ASP.NET服务器的连接,这里应该立刻break,取消下载文件的读取和发送,避免服务器耗费资源
break;
}
buffer = new byte[dataBufferSize];
int currentRead = stream.Read(buffer, 0, dataBufferSize);//从数据流中读取bufferSize大小的内容到服务器内存中
response.OutputStream.Write(buffer, 0, currentRead); //发送读取的内容数据到客户端浏览器
response.Flush(); //注意每次Write后,要及时调用Flush方法,及时释放服务器内存空间
hasRead += currentRead;//更新已经发送到客户端浏览器的字节数
}
response.Close();
}
Asp.Net core 版本可以参考 :https://www.cnblogs.com/OpenCoder/p/10013240.html
上一篇:1. 初窥kubernetes全貌— kubernetes入门到实战【入门+进阶篇】
下一篇:ReactJS-从另一个组件调用一个组件方法(ReactJS - Call One Component Method From Another Component)
文章标题:ASP.NET 下载大文件(分块下载)
文章链接:http://soscw.com/index.php/essay/57881.html