博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net 文件下载 支持断点续传
阅读量:5298 次
发布时间:2019-06-14

本文共 2694 字,大约阅读时间需要 8 分钟。

 

public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)        {            try            {                FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);                BinaryReader br = new BinaryReader(myFile);                try                {                    _Response.AddHeader("Accept-Ranges", "bytes");                    _Response.Buffer = false;                    long fileLength = myFile.Length;                    long startBytes = 0;                    int pack = 10240; //10K bytes                    //int sleep = 200;   //每秒5次   即5*10K bytes每秒                    int sleep = (int)Math.Floor((decimal)(1000 * pack / _speed)) + 1;                    if (_Request.Headers["Range"] != null)                    {                        _Response.StatusCode = 206;                        string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });                        startBytes = Convert.ToInt64(range[1]);                    }                    _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());                    if (startBytes != 0)                    {                        _Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));                    }                    _Response.AddHeader("Connection", "Keep-Alive");                    _Response.ContentType = "application/octet-stream";                    _Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));                    br.BaseStream.Seek(startBytes, SeekOrigin.Begin);                    int maxCount = (int)Math.Floor((decimal)((fileLength - startBytes) / pack)) + 1;                    for (int i = 0; i < maxCount; i++)                    {                        if (_Response.IsClientConnected)                        {                            _Response.BinaryWrite(br.ReadBytes(pack));                            Thread.Sleep(sleep);                        }                        else                        {                            i = maxCount;                        }                    }                }                catch                {                    return false;                }                finally                {                    br.Close();                    myFile.Close();                }            }            catch            {                return false;            }            return true;        }

 

转载于:https://www.cnblogs.com/huoyu5/p/3304886.html

你可能感兴趣的文章
常用的分析方法有哪些?
查看>>
Excel-图表制作
查看>>
Excel 日期和时间函数
查看>>
面对问题,如何去分析?(流失问题)
查看>>
Excel 文本函数
查看>>
电商数据分析总结
查看>>
Excel-信息函数&数组公式
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
求职秘籍-简历制作?
查看>>
用配置文件里面的参数值替换yaml模板中的变量值【python】
查看>>
Linux自动输入密码登录用户
查看>>
kvm虚拟机操作相关命令及虚拟机和镜像密码修改
查看>>
全球项目多区域数据同步问题解决方案
查看>>
spring boot jpadata 使用
查看>>
第三周总结
查看>>
jqGrid 3.6.2 中文文档——BasicGrid(3) .
查看>>