.net core断点续传
原文链接:https://www.cnblogs.com/juanheqiao/p/14204790.html
先创建个类:
public class ResFileStream: FileStream { public ResFileStream(string path, FileMode mode, FileAccess access) : base(path, mode, access) { } /// <param name="array"></param> /// <param name="offset">偏移量</param> /// <param name="count">读取的最大字节数</param> /// <returns></returns> public override int Read(byte[] array, int offset, int count) { // 此处可以限制下载速度 //count = 256; //Thread.Sleep(10); return base.Read(array, offset, count); } }
再创建个action
/// <summary> /// 文件下载 断点续传 视频加载 /// </summary> /// <returns></returns> [HttpGet] public IActionResult GetFile() { var filePath = @"F:\WeChatFiles.zip"; //文件所在路径 var name = @"WeChatFiles.zip"; //文件名 ResFileStream fs = new ResFileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); var type = new System.Net.Http.Headers.MediaTypeHeaderValue("application/zip").MediaType; return File(fs, contentType: type, name, enableRangeProcessing: true); //enableRangeProcessing 是否启动断点续传 }
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web 服务器的时候要多加一条信息,如果我们在已经暂停的下载再点继续的话,传递请求信息给 Web 服务器,要求从 2000070 字节开始。
GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2