1、直接使用Response.TransmitFile(filename)方法

  1. protected void Button_Click(object sender, EventArgs e)
  2. {
  3. /*
  4. 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
  5. 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
  6. 代码如下:
  7. */
  8.  
  9. Response.ContentType = "application/x-zip-compressed";
  10. Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
  11. string filename = Server.MapPath("DownLoad/aaa.zip");
  12.      //将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。
  13. Response.TransmitFile(filename);
  14. }

2、WriteFile实现下载

  1. protected void Button_Click(object sender, EventArgs e)
  2. {
  3. /* using System.IO; */
  4.  
  5. string fileName = "aaa.zip";//服务端保存的文件名
  6. string filePath = Server.MapPath("DownLoad/aaa.zip");//路径
  7.  
  8. System.IO.FileInfo fileInfo = new System.IO.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. //将指定文件的内容作为文件块直接写入 HTTP 响应输出流。
  18. Response.WriteFile(fileInfo.FullName);
  19. Response.Flush();
  20. Response.End();
  21. }

3、WriteFile分块下载

  1. protected void Button_Click(object sender, EventArgs e)
  2. {
  3. string fileName = "aaa.zip";//服务端保存的文件名
  4. string filePath = Server.MapPath("DownLoad/aaa.zip");//路径
  5.  
  6. System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
  7.  
  8. if (fileInfo.Exists == true)
  9. {
  10. const long ChunkSize = ;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
  11. byte[] buffer = new byte[ChunkSize];
  12.  
  13. Response.Clear();
  14. System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
  15. long dataLengthToRead = iStream.Length;//获取下载的文件总大小
  16. Response.ContentType = "application/octet-stream";
  17. Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
  18. while (dataLengthToRead > && Response.IsClientConnected)
  19. {
  20. //从流中读取字节块并将该数据写入给定缓冲区中
  21. //返回结果:读入缓冲区中的总字节数。
  22. //如果当前的字节数没有所请求那么多,则总字节数可能小于所请求的字节数;如果已到达流的末尾,则为零。
  23. int lengthRead = iStream.Read(buffer, , Convert.ToInt32(ChunkSize));//读取的大小
  24. //当在派生类中重写时,向当前流中写入字节序列,并将此流中的当前位置提升写入的字节数。
  25. Response.OutputStream.Write(buffer, , lengthRead);
  26. Response.Flush();
  27. dataLengthToRead = dataLengthToRead - lengthRead;
  28. }
  29. Response.Close();
  30. }
  31. }

4、流方式下载

  1. protected void Button4_Click(object sender, EventArgs e)
  2. {
  3. string fileName = "aaa.zip";//服务端保存的文件名
  4. string filePath = Server.MapPath("DownLoad/aaa.zip");//路径
  5.  
  6. //以字符流的形式下载文件
  7. System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
  8. byte[] bytes = new byte[(int)fs.Length];
  9. fs.Read(bytes, , 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. //将一个二进制字符串写入 HTTP 输出流
  15. Response.BinaryWrite(bytes);
  16. Response.Flush();
  17. Response.End();
  18. }

Asp.Net 之 下载文件的常用方式的更多相关文章

  1. asp.net mvc5 下载文件方法

    控制器自带的 FileContentResult 可以让我们很方便的返回文件到服务端,减少了很多步骤.用于下载文件的时候,像视频.文本.图片这种浏览器支持的文件,默认就会被浏览器打开.这时候想让它变成 ...

  2. 分布式进阶(十) linux命令行下载文件以及常用工具:wget、Prozilla、MyGet、Linuxdown、Curl、Axel

    linux命令行下载文件以及常用工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Li ...

  3. asp.net下载文件几种方式

    测试时我以字符流的形式下载文件,可行,前几个仅作参考 protected void Button1_Click(object sender, EventArgs e)  {  /*  微软为Respo ...

  4. asp.net 浏览器下载文件的四种方式

    // 方法一:TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { Response.ContentT ...

  5. asp.net 下载文件几种方式

    protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决使 ...

  6. C# ASP 上传/下载文件

    1.  上传文件前台页面 <div style="padding-left:20px;"> <asp:FileUpload ID="FileUpload ...

  7. .net 下载文件几种方式

    方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件. protected void Button1_Click(object sender, ...

  8. java 读取文件的常用方式

    1.读取: public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void rea ...

  9. Asp.net mvc 下载文件

    前言 最近有需求需要下载文件,可能是image的图片,也可能是pdf报告,也可能是微软的word或者excel文件. 这里就整理了asp.net mvc 和asp.net webapi 下载的方法 A ...

随机推荐

  1. Hibernate4.x之Session

    Hibernate Session概述 Session接口是Hibernate向应用程序提供的操纵数据库的最主要的接口,它提供了基本的保存.更新.删除和加载Java对象的方法. Session具有一个 ...

  2. [转] MATLAB快捷键

    原文地址:MATLAB快捷键大全 (转载)作者:掷地有声 一.索引混排版 备注:删除了如F1(帮助)等类型的常见快捷命令 SHIFT+DELETE永久删除 DELETE删除 ALT+ENTER属性 A ...

  3. 用slf4j+logback实现多功能日志解决方案 --- 转

    大家都知道,slf4j是原来log4j的作者写的一个新的日志组件,意思是简单日志门面接口,可以跟其他日志组件配合使用,常用的配合是slf4j+logback,无论从功能上还是从性能上都较之log4j有 ...

  4. [zouxianghui] 清空GridPanel的checkbox选中行

    清空GridPanel的checkbox选中行,GridPanel.getSelectionModel().clearSelections();可以清空选中状态

  5. 树莓PI交叉编译BOOST库(asio网络例子)

    环境搭建参考上一篇文章[http://www.cnblogs.com/yuliyang/p/4023758.html] 客户端(use boost.asio on raspberry pi )clie ...

  6. 交易策略研究 R库

    本文在Creative Commons许可证下发布 交易策略研究 R库,直接安装:xts, TTR,quantmod,RTAQ,PerformanceAnalytics,FactorAnalytics ...

  7. activemq 异步和同步接收

    来点实在的代码,用例子来说明: 1.异步接收,主要设置messageListener.,然后编写onmessage方法,很简单 a.客户端发送5条消息 package ch02.chat; impor ...

  8. 专门为公共部门和联邦机构所设计Microsoft Azure

    微软正式发布Microsoft Azure for Government,该云平台专门为公共部门和联邦机构所设计. 在2014年三月微软联邦执行官论坛上宣布的Microsoft Azure for G ...

  9. Vijos1404 遭遇战 最短路,dijkstra,堆

    P1404遭遇战 标签:[显示标签]     背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分 ...

  10. mysql 处理中文乱码问题

    CREATE TABLE tbl_score( `ID` INT NOT NULL, `score` DEC(,) NOT NULL, `subject` VARCHAR() NOT NULL ); ...