asp.net response.ContentType 下載檔案的四種方法

iDotNetSpace發表於2009-07-06

 protected void Button1_Click(object sender, EventArgs e)
    {

asp.net response.ContentType 下載檔案的四種方法
 1 protected void Button1_Click(object sender, EventArgs e)
 2asp.net response.ContentType 下載檔案的四種方法    {
 3        //TransmitFile實現下載
 4
 5asp.net response.ContentType 下載檔案的四種方法        /*
 6         微軟為Response物件提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite
 7         下載超過400mb的檔案時導致Aspnet_wp.exe程式回收而無法成功下載的問題。
 8         程式碼如下:
 9        */

10
11        Response.ContentType = "application/x-zip-compressed";
12        Response.AddHeader("Content-Disposition""attachment;filename=keji.rar");
13        string filename = Server.MapPath("keji.rar");
14        Response.TransmitFile(filename);
15        Response.Write("");
19
20    }

21    protected void Button2_Click(object sender, EventArgs e)
22asp.net response.ContentType 下載檔案的四種方法    {
23
24        //WriteFile實現下載
25        string fileName = "ceshi.rar";//客戶端儲存的檔名
26        string filePath = Server.MapPath("keji.rar");//路徑
27
28        FileInfo fileInfo = new FileInfo(filePath);
29        Response.Clear();
30        Response.ClearContent();
31        Response.ClearHeaders();
32        Response.AddHeader("Content-Disposition""attachment;filename=" + fileName);
33        Response.AddHeader("Content-Length", fileInfo.Length.ToString());
34        Response.AddHeader("Content-Transfer-Encoding""binary");
35        Response.ContentType = "application/octet-stream";
36        Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
37        Response.WriteFile(fileInfo.FullName);
38        Response.Flush();
39        Response.End();
40
41    }

42    protected void Button3_Click(object sender, EventArgs e)
43asp.net response.ContentType 下載檔案的四種方法    {
44        //WriteFile分塊下載
45
46        string fileName = "GhostXP.iso";//客戶端儲存的檔名
47        string filePath = Server.MapPath("GhostXP7.7.iso");//路徑
48
49         System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
50
51        if (fileInfo.Exists == true)
52asp.net response.ContentType 下載檔案的四種方法         {
53            const long ChunkSize = 409600;//100K 每次讀取檔案,只讀取100K,這樣可以緩解伺服器的壓力
54            byte[] buffer = new byte[ChunkSize];
55
56             Response.Clear();
57             System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
58            long dataLengthToRead = iStream.Length;//獲取下載的檔案總大小
59             Response.ContentType = "application/octet-stream";
60             Response.AddHeader("Content-Disposition""attachment; filename=" + HttpUtility.UrlEncode(fileName));
61            while (dataLengthToRead > 0 && Response.IsClientConnected)
62asp.net response.ContentType 下載檔案的四種方法             {
63                int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//讀取的大小
64                 Response.OutputStream.Write(buffer, 0, lengthRead);
65                 Response.Flush();
66                 dataLengthToRead = dataLengthToRead - lengthRead;
67             }

68             Response.Close();
69         }

70     }

71
72    //字元流方式下載檔案
73    protected void Button4_Click(object sender, EventArgs e)
74asp.net response.ContentType 下載檔案的四種方法    {
75        string fileName = "ce2.rar";//客戶端儲存的檔名
76        string filePath = Server.MapPath("keji.rar");//路徑
77
78        //以字元流的形式下載檔案
79        FileStream fs = new FileStream(filePath, FileMode.Open);
80        byte[] bytes = new byte[(int)fs.Length];
81        fs.Read(bytes, 0, bytes.Length);
82        fs.Close();
83        Response.ContentType = "application/octet-stream";
84        //通知瀏覽器下載檔案而不是開啟
85        Response.AddHeader("Content-Disposition""attachment;   filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
86        Response.BinaryWrite(bytes);
87        Response.Flush();
88        Response.End();
89
90    }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-608431/,如需轉載,請註明出處,否則將追究法律責任。

相關文章