asp.net里,各种下载方式汇总


 1         /// 
 2         /// 下载文件 TransmitFile
 3         /// 
 4         /// 
 5         public static void DownloadFile(string filePath)
 6         {
 7             string filename = HttpContext.Current.Server.MapPath(filePath);
 8             var response = HttpContext.Current.Response;
 9             response.ContentType = "application/x-zip-compressed";
10             response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(filename) );
11             response.TransmitFile(filename); 
12         }
13 
14         /// 
15         /// 下载大文件
16         /// 
17         /// 
18         public static void DownloadBigFile(string filePath)
19         {
20             filePath =  HttpContext.Current.Server.MapPath(filePath);//路径
21             string fileName = Path.GetFileName(filePath);//客户端保存的文件名
22             var response = HttpContext.Current.Response;
23             System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
24             if (fileInfo.Exists == true)
25             {
26                 const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
27 
28                 byte[] buffer = new byte[ChunkSize];
29 
30                 response.Clear();
31                 System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
32                 long dataLengthToRead = iStream.Length;//获取下载的文件总大小
33                 response.ContentType = "application/octet-stream";
34                 response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
35                 while (dataLengthToRead > 0 && response.IsClientConnected)
36                 {
37                     //读取的大小 Response.OutputStream.Write(buffer, 0, lengthRead);
38                     int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));
39                     response.Flush();
40                     dataLengthToRead = dataLengthToRead - lengthRead;
41                 }
42 
43                 response.Close();
44             }
45         }
46 
47         /// 
48         /// 流方式下载
49         /// 
50         /// 
51         public static void DownloadFileStream(string filePath)
52         {
53             filePath = HttpContext.Current.Server.MapPath(filePath);//路径
54             string fileName = Path.GetFileName(filePath);//客户端保存的文件名
55             var response = HttpContext.Current.Response;
56             FileStream fs = new FileStream(filePath, FileMode.Open);
57 
58             byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length);
59 
60             fs.Close();
61             response.ContentType = "application/octet-stream";
62             //通知浏览器下载文件而不是打开
63             response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
64             response.BinaryWrite(bytes);
65             response.Flush();
66             response.End();
67         }
68 
69         /// 
70         /// 将文本作为某文件下载
71         /// 
72         /// 
73         /// 
74         public static void DownloadText(string text , string fileName)
75         {
76             byte[] bytes = Encoding.Default.GetBytes(text);
77             var response = HttpContext.Current.Response;
78             response.ContentType = "application/octet-stream";
79             //通知浏览器下载文件而不是打开
80             response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
81             response.BinaryWrite(bytes);
82             response.Flush();
83             response.End();
84         }

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
Bing Webmaster Portal Back