//以下代码根据别人文章和自己整理 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; namespace WebApplication1 { public partial class DownfFile : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } /// <summary> /// WriteFile下载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e) { string name ="DreamweaverCS3简体中文免激活绿色版.rar"; string path =Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar"); FileInfo fileinfo = new FileInfo(path); long size = fileinfo.Length; Response.Clear(); Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + name); Response.AppendHeader("Content-Length", size.ToString()); Response.AppendHeader("Content-Transfer-Encoding", "binary"); Response.ContentEncoding = System.Text.Encoding.UTF8;//GetEncoding("gb2312"); Response.WriteFile(path,0,size); Response.Flush(); Response.End(); } /// <summary> /// 使用OutputStream.Write分块下载文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button2_Click(object sender, EventArgs e) { string fileName = HttpContext.Current.Server.UrlEncode("DreamweaverCS3简体中文免激活绿色版.rar"); string filePath = HttpContext.Current.Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar"); //如果要写类的话用HttpResponse ht=Page.Response然后方法写void DownloadFile(HttpResponse response, string serverPath) FileInfo fileinfo = new FileInfo(filePath); if (fileinfo.Exists) { const long size = 102400; //指定下载块的大小 byte[] by = new byte[size]; //建立一个100kb的缓存去大小 long dataread = 0; //已读的字节数 try { //打开文件 FileStream filestream = new FileStream(filePath, FileMode.Open, FileAccess.Read); dataread = filestream.Length;//文件总的大小 int i = 0; //添加Http头 Response.Clear(); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName); Response.AddHeader("Content-Length", dataread.ToString()); while (dataread > 0) { if (Response.IsClientConnected) { int length = filestream.Read(by,0, Convert.ToInt32(size)); Response.OutputStream.Write(by, 0, length); Response.Flush(); Response.Clear(); by = new byte[size]; i++; dataread = dataread - length;//判断是否读取玩 如果读取完就跳出while循环 } else { dataread = -1;//客户端已经失去连接中段操作 } //filestream.Close(); //Response.Close();就是多写这行代码 导致下载文件只有100kb } } catch { } } } /// <summary> /// 使用BinaryWrite下载文件,大文件效率不行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button3_Click(object sender, EventArgs e) { string name = "DreamweaverCS3简体中文免激活绿色版.rar"; string path = Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar"); FileStream filestream = File.OpenRead(path); byte[] by = new byte[filestream.Length]; filestream.Read(by, 0, by.Length); filestream.Close(); Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name)); Response.AddHeader("Content-Length", by.Length.ToString()); Response.BinaryWrite(by); Response.Flush(); Response.End(); } /// <summary> /// 使用TransmifFile下载文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button4_Click(object sender, EventArgs e) { //提供下载的文件,不编码的话文件名会乱码 string fileName = "DreamweaverCS3简体中文免激活绿色版.rar"; //HttpContext.Current.Server.UrlEncode("DreamweaverCS3简体中文免激活绿色版.rar"); string filePath = Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar");//HttpContext.Current.Server.UrlEncode(Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar")); FileInfo fileinfo = new FileInfo(filePath); long filesize = fileinfo.Length; Response.Clear(); Response.ContentType = "application/x-zip-compressed"; Response.AddHeader("Content-Disposition", "attachment;filename="+ fileName); //不指明Content-Length用Flush的话不会显示下载进度 Response.AddHeader("Content-Length", filesize.ToString()); Response.TransmitFile(fileName, 0, filesize); Response.Flush(); Response.Close(); } /// <summary> /// 使用BinaryWrite分块下载文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button5_Click(object sender, EventArgs e) { string fileName = HttpContext.Current.Server.UrlEncode("DreamweaverCS3简体中文免激活绿色版.rar"); string filePath = HttpContext.Current.Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar"); long size = 102400; //指定下载块的大小 byte[] by = new byte[size]; //建立一个100kb的缓存去大小 long dataread = 0; //已读的字节数 try { //打开文件 FileStream filestream = new FileStream(filePath, FileMode.Open, FileAccess.Read); dataread = filestream.Length;//文件总的大小 //添加Http头 Response.Clear(); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName); Response.AddHeader("Content-Length", dataread.ToString()); while (dataread > 0) { if (Response.IsClientConnected) { int length = filestream.Read(by, 0, Convert.ToInt32(size)); Response.BinaryWrite(by); Response.Flush(); Response.Clear(); dataread = dataread - length;//判断是否读取玩 如果读取完就跳出while循环 } else { dataread = -1;//客户端已经失去连接中段操作 } //filestream.Close(); //Response.Close(); } } catch { } } } }