//方法一:TransmitFile实现下载
string fileName = "ss.docx";                          //客户端预设的文件名,导出时可修改 
string filePath = Server.MapPath("~/AssessReport/评估报表.docx");          //目标文件路径
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.TransmitFile(filePath);
注释:微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题 
       //方法二:WriteFile实现下载
string fileName = "ss.docx";                               //客户端保存的文件名 
       string filePath = Server.MapPath("~/AssessReport/评估报表.docx");          //目标文件路径
       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分块下载
string fileName = "ss.docx";                               //客户端保存的文件名 
       string filePath = Server.MapPath("~/AssessReport/评估报表.docx");
       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=" + 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();
      }
 
        //方法四:流方式下载
  string fileName = "aaa.docx";                            //客户端保存的文件名 
        string filePath = Server.MapPath("~/AssessReport/评估报表.docx");
        //以字符流的形式下载文件 
        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();


 

C#从服务器下载文件的四种方式的更多相关文章

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

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

  2. C++服务器下载文件的两种方式

    #include <afxinet.h>#include "wininet.h" #pragma comment( lib, "wininet.lib&quo ...

  3. linux服务器之间传输文件的四种方式

    linux文件传输在内网渗透中至关重要,所以我在此总结一下几种Linux服务器之间传输文件的四种方式 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法]scp就是se ...

  4. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

  5. 从后端接口下载文件的2种方式:get方式、post方式

    从后端接口下载文件的2种方式 一.get方式 直接使用: location.href='http://www.xxx.com/getFile?params1=xxx&params2=xxxx' ...

  6. 【文件下载】Java下载文件的几种方式

    [文件下载]Java下载文件的几种方式  摘自:https://www.cnblogs.com/sunny3096/p/8204291.html 1.以流的方式下载. public HttpServl ...

  7. linux创建文件的四种方式(其实是两种,强行4种)

    linux创建文件的四种方式: 1.vi newfilename->i->编辑文件->ESC->:wq! 2.touch newfilename 3.cp sourcePath ...

  8. 解析xml文件的四种方式

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...

  9. spring引用hibernate映射文件的四种方式

    1.mappingResources 2.mappingLocations 3.mappingDirectoryLocations 4.mappingJarLocations 四种方式:https:/ ...

随机推荐

  1. 使用 Linux Mint 作为主要操作系统的一些个人常用软件

    本篇文章讲一下一些 Linux 上的应用,多数为日常生活娱乐用的软件,同时也会讲一点开发工具,对于有兴趣继续研究 Linux 的可以参考一下. 目录 软件的安装方式 1.Software Manage ...

  2. docker 容器连接 host的sql server失败

    报错内容::“A network-related or instance-specific error occurred while establishing a connection to SQL ...

  3. chip based learning

    chip types Transistor mode of operation Digital chip: 0/1  -> digital clac Analog chip: sound / b ...

  4. php 的生命周期

    1.PHP的运行模式: PHP两种运行模式是WEB模式.CLI模式.无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行. 1.当我们在终端敲入php这个命令的时候,它使用的是CLI. 它就像 ...

  5. linux设置脚本开机自启

    由于在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 赋予脚本可执行权限假设/opt/script/ ...

  6. JMeter首金网自营项目-转义及数据库数据乱码的解决

    param的string参数: 需要对”进行转义,加/ { "prdCreditInfo": { "revision": 0, "maxCredit& ...

  7. UML期末复习题——2.5:System Sequence Diagram & Post-condition

    第五题:系统顺序图 重要概念: 1.对象: 对象是特定行为与属性的集合. 对象的表示方式有三种: a.包括对象名和类名 b.只有类名. c.只有对象名 2.消息表示形式: 消息用于描述对象间交互的方式 ...

  8. Node.js与VUE安装及环境配置之Windows篇

    Node.js安装及环境配置之Windows篇 https://www.cnblogs.com/zhouyu2017/p/6485265.html Node.js安装及环境配置之Windows篇htt ...

  9. ifc解析与渲染

  10. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_17-CMS前端工程创建-单页面应用介绍

    查看运行起来的页面的源代码 这个webpck打包生成的文件. 单页面应用的优缺点: 优点: 1.用户操作体验好,用户不用刷新页面,整个交互过程都是通过Ajax来操作. 2.适合前后端分离开发,服务端提 ...