asp.net 下载的几种方法

本文介绍了几种使用ASP.NET实现文件下载的方法,包括TransmitFile、WriteFile及其分块下载实现方式,展示了具体代码示例。
ExpandedBlockStart.gif代码
 1  //TransmitFile实现下载
 2    protected void TransmitFile()
 3         {
 4            
 5             string strFileName = "a.jpg";
 6             Response.ContentType = "application/x-zip-compressed";
 7             //Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
 8             string filename =DateTime.Now.ToShortDateString() + strFileName; 
 9             //BLL.Config.PART_EM_UPLOAD_DOC 为路径   ("D:/EMUploadDoc/")
10             Response.AddHeader("Content-Disposition""attachment;filename=" +Server.UrlPathEncode(strFileName));
11            //Server.UrlPathEncode()解决文件名的乱码问题.
12             
13             Response.TransmitFile(filename);
14         }  
15     //WriteFile实现下载
16     protected void WriteFile()
17     {
18        
19         string fileName = "aa.txt";//客户端保存的文件名
20         string filePath = Server.MapPath("DownLoad/"+fileName+"");//路径
21         FileInfo fileInfo = new FileInfo(filePath);
22         Response.Clear();
23         Response.ClearContent();
24         Response.ClearHeaders();
25         Response.AddHeader("Content-Disposition""attachment;filename=" + fileName);
26         Response.AddHeader("Content-Length", fileInfo.Length.ToString());
27         Response.AddHeader("Content-Transfer-Encoding""binary");
28         Response.ContentType = "application/octet-stream";
29         Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
30         Response.WriteFile(fileInfo.FullName);
31         Response.Flush();
32         Response.End();
33     }
34     //WriteFile分块下载
35     protected void WriteFile_M()
36     {
37         string fileName = "a.jpg";//客户端保存的文件名
38         string filePath = Server.MapPath("DownLoad/a.jpg");//路径
39         System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
40         if (fileInfo.Exists == true)
41         {
42             const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
43             byte[] buffer = new byte[ChunkSize];
44             Response.Clear();
45             System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
46             long dataLengthToRead = iStream.Length;//获取下载的文件总大小
47             Response.ContentType = "application/octet-stream";
48             Response.AddHeader("Content-Disposition""attachment; filename=" + HttpUtility.UrlEncode(fileName));
49             while (dataLengthToRead > 0 && Response.IsClientConnected)
50             {
51                 int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
52                 Response.OutputStream.Write(buffer, 0, lengthRead);
53                 Response.Flush();
54                 dataLengthToRead = dataLengthToRead - lengthRead;
55             }
56             Response.Close();
57         }
58     }
59     protected void file_Io()
60     {
61         string fileName = "a.jpg";
62         string filePath = Server.MapPath("DownLoad/"+fileName+"");
63         //以字符流的形式下载文件
64         FileStream fs = new FileStream(filePath, FileMode.Open);
65         byte[] bytes = new byte[(int)fs.Length];
66         fs.Read(bytes, 0, bytes.Length);
67         fs.Close();
68         Response.ContentType = "application/octet-stream";
69         //通知浏览器下载文件而不是打开
70         Response.AddHeader("Content-Disposition""attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
71         Response.BinaryWrite(bytes);
72         Response.Flush();
73         Response.End();
74     }
75 

 

转载于:https://www.cnblogs.com/dingxinliang/archive/2010/03/24/1693460.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值