protected void Button1_Click(object sender, EventArgs e)
  {
  /*
  微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
  下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
  代码如下:
  */

Response.ContentType = "application/x-zip-compressed";
  Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
  string filename = Server.MapPath("DownLoad/aaa.zip");
  Response.TransmitFile(filename);
  }

//WriteFile实现下载
  protected void Button2_Click(object sender, EventArgs e)
  {
  /*
  using System.IO;
   
  */

string fileName ="aaa.zip";//客户端保存的文件名
  string filePath=Server.MapPath("DownLoad/aaa.zip");//路径

FileInfo fileInfo = new FileInfo(filePath);
  Response.Clear();
  Response.ClearContent();
  Response.ClearHeaders();
  Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
  Response.AddHeader("Content-Length", fileInfo.Length.ToString());
  Response.AddHeader("Content-Transfer-Encoding", "binary");
  Response.ContentType = "application/octet-stream";
  Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
  Response.WriteFile(fileInfo.FullName);
  Response.Flush();
  Response.End();
  }

//WriteFile分块下载
  protected void Button3_Click(object sender, EventArgs e)
  {

string fileName = "aaa.zip";//客户端保存的文件名
  string filePath = Server.MapPath("DownLoad/aaa.zip");//路径

System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);

if (fileInfo.Exists == true)
  {
  const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
  byte[] buffer = new byte[ChunkSize];

Response.Clear();
  System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
  long dataLengthToRead = iStream.Length;//获取下载的文件总大小
  Response.ContentType = "application/octet-stream";
  Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
  while (dataLengthToRead > 0 && Response.IsClientConnected) 
  {
  int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
  Response.OutputStream.Write(buffer, 0, lengthRead);
  Response.Flush();
  dataLengthToRead = dataLengthToRead - lengthRead;
  }
  Response.Close();
  }
  }

//流方式下载
  protected void Button4_Click(object sender, EventArgs e)
  {
  string fileName = "aaa.zip";//客户端保存的文件名
  string filePath = Server.MapPath("DownLoad/aaa.zip");//路径

//以字符流的形式下载文件
  FileStream fs = new FileStream(filePath, FileMode.Open);
  byte[] bytes = new byte[(int)fs.Length];
  fs.Read(bytes, 0, bytes.Length);
  fs.Close();
  Response.ContentType = "application/octet-stream";
  //通知浏览器下载文件而不是打开
  Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
  Response.BinaryWrite(bytes);
  Response.Flush();
  Response.End();

}

最新文章

  1. 浅析用Base64编码的图片优化网页加载速度
  2. 安装redis入门
  3. 黑马程序员:Java编程_7K面试题之银行业务调度系统
  4. linux 权限操作
  5. Python 之range 和 xrange
  6. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q127-Q130)
  7. PMP--案例解答要点
  8. 【JSP】JSTL使用core标签总结(不断更新中)
  9. Java 网络编程 字符流的发送与接收 自定义数据边界
  10. linux下跨服务器文件文件夹的复制
  11. SQL Server Mysql 对null值理解的不同
  12. 安装Apache Felix OSGI Framework小记
  13. 非常棒的Visual Studo调试插件:OzCode 2.0 下载地址
  14. Hibernate 之强大的HQL查询
  15. Canvas + JavaScript 制作图片粒子效果
  16. Linux指令--ping
  17. LODOP 获取打印设计代码不带INIT初始化语句
  18. Delphi RTTI的应用(一)
  19. OSLab多进程
  20. paho.mqtt.embedded-c MQTTPacket transport.c hacking

热门文章

  1. 水晶报表WEB方式下不打印的问题
  2. angularjs中ng-show的使用
  3. nDCG学习笔记
  4. UISlider 设置增量
  5. 使用Jmeter对应用程序进行测试
  6. KineticJS教程(9)
  7. UNIX网络编程读书笔记:recvmsg和sendmsg函数
  8. js 函数节流throttle 函数去抖debounce
  9. 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
  10. excel 如何为列添加指定内容(字符串)