博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】c#实现文件下载
阅读量:5269 次
发布时间:2019-06-14

本文共 2481 字,大约阅读时间需要 8 分钟。

需求:点击SAVE,去ajax去后台下载文件,完成后出现保存对话框,然后直接下载.

解决方案:下载完成后用JS转到向到另一个页面,在这页面Page_Load里用C#Response对象直接下载.

 

 

下载实现代码

private void DownFile()   {      try      {         long lngFileSize;         byte[] bytBuffer;         int iReading;         string sFileName = Server.MapPath("TextFile.txt");         Stream outStream = Response.OutputStream;//get output stream         //set htttp header         Response.ContentType = "application/Zip";         Response.AppendHeader("Connection", "close");         Response.AppendHeader("Content-Disposition", "  attachment;  filename  =  ItemMarc.txt");//default file name when download         FileStream fStream = new FileStream(sFileName, FileMode.OpenOrCreate, FileAccess.Read);         lngFileSize = fStream.Length;         bytBuffer = new byte[(int)lngFileSize];         while ((iReading = fStream.Read(bytBuffer, 0, (int)lngFileSize)) > 0)         {            outStream.Write(bytBuffer, 0, iReading);         }         fStream.Close();         outStream.Close();         Response.End();      }      catch (Exception ex)      {         throw ex;      }         }

 

 

解释:1.Response.ContentType = "application/Zip";

Content-Type是返回消息中非常重要的内容,它标识出这个返回内容的类型,其值为“主类型/子类型”的格式,例如最常见的就是text /html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内 容。常见的内容类型有:

text/html HTML文本
image/jpeg JPG图片
image/gif GIF图片
application/xml XML文档
audio/x-mpegurl MP3文件列表,如果安装了Winamp,则可以直接把它当面M3U文件来打开

 

2.Response.AppendHeader("Connection", "close");

在http1.1中request和reponse header中都有可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理。

   在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方 也不想支持长链接,则在response中也需要明确说明connection的值为close.
    不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。

 

3. Response.AppendHeader("Content-Disposition", "  attachment;  filename  =  ItemMarc.txt");

Content-Disposition:如果用AddHeader的方法在HTTP消息头中加入Content-Disposition段,并指定其值为“attachment”,那么无论这个文件是何类型,浏览器都会提示我们下载此文件,因为此时它认为后面的消息体是一个“附件”,不需要由浏览器来处理了。通过AddHeader函数可以为HTTP消息头加入我们自定义的内容。使用这种方法可以强制让浏览器提示下载文件,即使这个文件是我们已知的类型,基于 是HTML网页。如果想要让用户下载时提示一个默认的文件名,只需要在前面一句话后加上“filename=文件名”即可。

如果把Content-Type和Content-Disposition结合在一起使用会怎么样呢?

打开一个网页时,浏览器会首先看是否有Content-Disposition: attachment这一项,如果有,无论Content-Type的值是什么,都会提示文件下载。
如果指定了filename,就会提示默认的文件名为此文件名。

 

4.Response.End();将缓存输出到客户端,实际现象,如果没有这一句,那么会将默认的所有HTML内容也一起返回到服务器.

转载于:https://www.cnblogs.com/gates/p/4149301.html

你可能感兴趣的文章
写一个简单的存储过程
查看>>
Xshell 连接虚拟机特别慢 解决方案
查看>>
redis 设置外网可访问
查看>>
mysql 日期辅助表
查看>>
MySQL | MySQL 数据库系统(一)
查看>>
架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)
查看>>
20款开发运维必备的顶级工具
查看>>
Python运维中20个常用的库和模块
查看>>
Kubernetes扩展容器架构的7款工具
查看>>
生活…感情…工作…各种…都是浮云
查看>>
Shell编程-控制结构 | 基础篇
查看>>
Shell编程-条件测试 | 基础篇
查看>>
架构篇 | LAMP 架构应用案例 - 部署 PHPMyAdmin 系统(二)
查看>>
Shell 脚本中 '$' 符号的多种用法
查看>>
Linux 系统结构详解
查看>>
CentOS 8 网卡命令
查看>>
Shell编程 | 脚本参数与交互及常见问题
查看>>
CentOS 8 正式发布!
查看>>
iView-admin2.0前后台axios跨域问题以及用户登录逻辑
查看>>
修改Nodejs内置的npm默认配置路径方法
查看>>