快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

C#中实现文件下载的四种方法总结

  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Web;  
  5. using System.Web.Security;  
  6. using System.Web.UI;  
  7. using System.Web.UI.WebControls;  
  8. using System.Web.UI.WebControls.WebParts;  
  9. using System.Web.UI.HtmlControls;  
  10. using System.IO;  
  11.  
  12. public partial class _Default : System.Web.UI.Page  
  13. {  
  14. protected void Page_Load(object sender, EventArgs e)  
  15. {  
  16.  



//TransmitFile实现下载
 

  1. protected void Button1_Click(object sender, EventArgs e)  
  2. {  
  3.  
  4.  
  5. Response.ContentType = "application/x-zip-compressed";  
  6. Response.AddHeader("Content-Disposition""attachment;filename=z.zip");  
  7. string filename = Server.MapPath("DownLoad/z.zip");  
  8. Response.TransmitFile(filename);  
  9. }  

 


//WriteFile实现下载
 

  1. protected void Button2_Click(object sender, EventArgs e)  
  2. {  
  3.  
  4.  
  5. string fileName ="asd.txt";//客户端保存的文件名  
  6. string filePath=Server.MapPath("DownLoad/aaa.txt");//路径  
  7.  
  8. FileInfo fileInfo = new FileInfo(filePath);  
  9. Response.Clear();  
  10. Response.ClearContent();  
  11. Response.ClearHeaders();  
  12. Response.AddHeader("Content-Disposition""attachment;filename=" + fileName);  
  13. Response.AddHeader("Content-Length", fileInfo.Length.ToString());  
  14. Response.AddHeader("Content-Transfer-Encoding""binary");  
  15. Response.ContentType = "application/octet-stream";  
  16. Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");  
  17. Response.WriteFile(fileInfo.FullName);  
  18. Response.Flush();  
  19. Response.End();  
  20. }  



//WriteFile分块下载
 

  1. protected void Button3_Click(object sender, EventArgs e)  
  2. {  
  3.  
  4. string fileName = "aaa.txt";//客户端保存的文件名  
  5. string filePath = Server.MapPath("DownLoad/aaa.txt");//路径  
  6.  
  7. System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);  
  8.  
  9. if (fileInfo.Exists == true)  
  10. {  
  11. const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力  
  12. byte[] buffer = new byte[ChunkSize];  
  13.  
  14. Response.Clear();  
  15. System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);  
  16. long dataLengthToRead = iStream.Length;//获取下载的文件总大小  
  17. Response.ContentType = "application/octet-stream";  
  18. Response.AddHeader("Content-Disposition""attachment; filename=" + HttpUtility.UrlEncode(fileName));  
  19. while (dataLengthToRead > 0 && Response.IsClientConnected)  
  20. {  
  21. int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小  
  22. Response.OutputStream.Write(buffer, 0, lengthRead);  
  23. Response.Flush();  
  24. dataLengthToRead = dataLengthToRead - lengthRead;  
  25. }  
  26. Response.Close();  
  27. }  
  28. }  


//流方式下载
 

  1. protected void Button4_Click(object sender, EventArgs e)  
  2. {  
  3. string fileName = "aaa.txt";//客户端保存的文件名  
  4. string filePath = Server.MapPath("DownLoad/aaa.txt");//路径  
  5.  
  6. //以字符流的形式下载文件  
  7. FileStream fs = new FileStream(filePath, FileMode.Open);  
  8. byte[] bytes = new byte[(int)fs.Length];  
  9. fs.Read(bytes, 0, bytes.Length);  
  10. fs.Close();  
  11. Response.ContentType = "application/octet-stream";  
  12. //通知浏览器下载文件而不是打开  
  13. Response.AddHeader("Content-Disposition""attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));  
  14. Response.BinaryWrite(bytes);  
  15. Response.Flush();  
  16. Response.End();  
  17.  
  18. }  

 

顶(1)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论