using System; 002 using System.Data; 003 using System.Configuration; 004 using System.Web; 005 using System.Web.Security; 006 using System.Web.UI; 007 using System.Web.UI.WebControls; 008 using System.Web.UI.WebControls.WebParts; 009 using System.Web.UI.HtmlControls; 010 using System.IO; 011 012 013 014 public partial class _Default : System.Web.UI.Page 015 { 016 protected void Page_Load(object sender, EventArgs e) 017 { 018 019 } 020 021 //TransmitFile实现下载 022 protected void Button1_Click(object sender, EventArgs e) 023 { 024 /* 025 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite 026 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。 027 代码如下: 028 */ 029 030 Response.ContentType = "application/x-zip-compressed"; 031 Response.AddHeader("Content-Disposition", "attachment;filename=z.zip"); 032 string filename = Server.MapPath("DownLoad/z.zip"); 033 Response.TransmitFile(filename); 034 } 035 036 //WriteFile实现下载 037 protected void Button2_Click(object sender, EventArgs e) 038 { 039 /* 040 using System.IO; 041 042 */ 043 044 string fileName ="asd.txt";//客户端保存的文件名 045 string filePath=Server.MapPath("DownLoad/aaa.txt");//路径 046 047 FileInfo fileInfo = new FileInfo(filePath); 048 Response.Clear(); 049 Response.ClearContent(); 050 Response.ClearHeaders(); 051 Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); 052 Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 053 Response.AddHeader("Content-Transfer-Encoding", "binary"); 054 Response.ContentType = "application/octet-stream"; 055 Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); 056 Response.WriteFile(fileInfo.FullName); 057 Response.Flush(); 058 Response.End(); 059 } 060 061 //WriteFile分块下载 062 protected void Button3_Click(object sender, EventArgs e) 063 { 064 065 string fileName = "aaa.txt";//客户端保存的文件名 066 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 067 068 System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); 069 070 if (fileInfo.Exists == true) 071 { 072 const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力 073 byte[] buffer = new byte[ChunkSize]; 074 075 Response.Clear(); 076 System.IO.FileStream iStream = System.IO.File.OpenRead(filePath); 077 long dataLengthToRead = iStream.Length;//获取下载的文件总大小 078 Response.ContentType = "application/octet-stream"; 079 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName)); 080 while (dataLengthToRead > 0 && Response.IsClientConnected) 081 { 082 int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小 083 Response.OutputStream.Write(buffer, 0, lengthRead); 084 Response.Flush(); 085 dataLengthToRead = dataLengthToRead - lengthRead; 086 } 087 Response.Close(); 088 } 089 } 090 091 //流方式下载 092 protected void Button4_Click(object sender, EventArgs e) 093 { 094 string fileName = "aaa.txt";//客户端保存的文件名 095 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 096 097 //以字符流的形式下载文件 098 FileStream fs = new FileStream(filePath, FileMode.Open); 099 byte[] bytes = new byte[(int)fs.Length]; 100 fs.Read(bytes, 0, bytes.Length); 101 fs.Close(); 102 Response.ContentType = "application/octet-stream"; 103 //通知浏览器下载文件而不是打开 104 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); 105 Response.BinaryWrite(bytes); 106 Response.Flush(); 107 Response.End(); 108 109 } 110 }
使用GridView等控件导出Excel
public void outExcel() 02 { 03 string name = returnName(); 04 05 string style = @"<style>.text{mso-number-format:\@;}</style>"; 06 07 Response.ClearContent(); 08 09 Response.Buffer = true; 10 Response.Charset = "gb2312"; 11 Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 12 13 Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8) + ".xls"); 14 15 Response.ContentType = "application/excel"; 16 17 StringWriter sw = new StringWriter(); 18 19 HtmlTextWriter htw = new HtmlTextWriter(sw); 20 21 GridView1.RenderControl(htw); 22 23 Response.Write(style); 24 25 Response.Write(sw.ToString()); 26 27 Response.End(); 28 }