麦田

不积跬步无以至千里.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  445 随笔 :: 16 文章 :: 192 评论 :: 95万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
复制代码
 Stream stream = null;
            //一次读取并返回到客户端的字节数
            var bytesToRead = 10000;
            //缓存上面读取到的字节
            var buffer = new Byte[bytesToRead];
            try
            {
                //创建WebRequest
                var fileReq = (HttpWebRequest)HttpWebRequest.Create(url);
                //为请求声明一个response
                var fileResp = (HttpWebResponse)fileReq.GetResponse();
                if (fileReq.ContentLength > 0)
                    fileResp.ContentLength = fileReq.ContentLength;
                //从请求响应中获取返回的Stream
                stream = fileResp.GetResponseStream();
                //准备当前客户端的响应
                var resp = HttpContext.Current.Response;
                //指定响应头的类型
                resp.ContentType = "application/octet-stream";
                //指定返回文件的名称
                resp.AddHeader("Content-Disposition", "attachment; filename=\"qq.exe\"");
                //指定返回文件的大小
                resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());
                int length;
                do
                {
                    //检测当前客户端是否仍然和服务器保持连接状态
                    if (resp.IsClientConnected)
                    {
                        //读取数据到缓冲区
                        length = stream.Read(buffer, 0, bytesToRead);
                        resp.OutputStream.Write(buffer, 0, length);
                        resp.Flush();
                        //清空缓冲区
                        buffer = new Byte[bytesToRead];
                    }
                    else
                    {
                        //如果客户端和服务器和连接已丢失,则放弃下载
                        length = -1;
                    }
                } while (length > 0); //循环,直到stream的结束
            }
            finally
            {
                if (stream != null)
                {
                    //关闭stream
                    stream.Close();
                }
            }
复制代码

 

posted on   一些记录  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示