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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?