需求:下载站点目录下DownLoad文件夹中的logo.zip

前端HTML代码部分:

<div>1.通过超链接下载:<a href="../DownLoadFiles/logo.zip">点击下载</a><br /><!-- 一样的效果 -->1.通过超链接下载:<a href="/DownLoadFiles/logo.zip">点击下载</a><br />2.通过Response对象的TransmitFile方法(这个方法下载下来的是整个网页:DownLoadFile.aspx):<asp:Button runat="server" ID="btnDownload" Text="点击下载" OnClick="btnDownload_Click" /><br />3.WriteFile实现下载:<asp:Button runat="server" ID="btnDownload2" Text="点击下载" OnClick="btnDownload_Click2" /><br />4.WriteFile分块下载:<asp:Button runat="server" ID="btnDownload3" Text="点击下载" OnClick="btnDownload_Click3" /><br />5.字符流方式下载文件:<asp:Button runat="server" ID="btnDownload4" Text="点击下载" OnClick="btnDownload_Click4" /></div>

后端类部分:

第一种方法:

超链接的形式下载:html代码中已实现

第二种方法:

 protected void btnDownload_Click(object sender, EventArgs e){//这种方法会把整个网页下载下来//TransmitFile实现下载/*微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。代码如下:*///文件下载,所以文件头也含有zipResponse.ContentType = "application/x-zip-compressed";Response.AddHeader("Content-Disposition", "attachment:filename=logo.zip");//找到文件的绝对路径string filename = Server.MapPath(".") + "/DownLoadFiles/logo.zip";Response.TransmitFile(filename);}

第三种方法:

protected void btnDownload_Click2(object sender, EventArgs e){//WriteFile实现下载string fileName = "logo.zip";//客户端保存的文件名string filePath = Server.MapPath(".") + "/DownLoadFiles/logo.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();}

第四种方法:

 protected void btnDownload_Click3(object sender, EventArgs e){//WriteFile分块下载string fileName = "logo.zip";//客户端保存的文件名string filePath = Server.MapPath(".") + "/DownLoadFiles/logo.zip";//路径System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);if (fileInfo.Exists == true){const long ChunkSize = 409600;//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/x-zip-compressed";      //可以改成zip哦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 btnDownload_Click4(object sender, EventArgs e){//字符流方式下载文件string fileName = "logo.zip";//客户端保存的文件名string filePath = Server.MapPath(".") + "/DownLoadFiles/logo.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();}
}

注意:如果出现无法进行下载,提示logo.zip被另一个文件占用的时候,可以直接关闭项目,再重启项目。问题就会得到解决。
参考链接:https://blog.csdn.net/llftc/article/details/7099753

asp.net 文件下载的五种方式相关推荐

  1. java中读取properties文件内容五种方式

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  2. SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式

    这对时间在学习SSH中Spring架构,Spring的事务配置做了具体总结.在此之间对Spring的事务配置仅仅是停留在听说的阶段,总结一下.总体把控.通过这次的学习发觉Spring的事务配置仅仅要把 ...

  3. android ui 最新教程,Android更新UI的五种方式,androidui五种

    Android更新UI的五种方式,androidui五种handler.post activity.runOnUiThread view.post handler+Thread AsyncTask 例 ...

  4. CSS 五种方式实现 Footer 置底

    CSS 五种方式实现 Footer 置底 页脚置底(Sticky footer) 就是让网页的footer部分始终在浏览器窗口的底部. 当网页内容足够长以至超出浏览器可视高度时,页脚会随着内容被推到网 ...

  5. 下列哪个不是目前python里的内置模块-python引入模块的五种方式与内置模块

    模块导入的五种方式 1.import 模块名 2.from 模块名 import 方法名 3.from 模块名 import * 4.import 模块名 as 别名 5.from 模块名 impor ...

  6. java clone方法_干货满满:Java中创建对象的五种方式详解

    通常来说,对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为. 作为Java开发者,我们通常都是使用依赖管理系统,比如Spring去创建Java对象,但使用管理系统创建对象并不是唯一 ...

  7. Github项目解析(九)--实现Activity跳转动画的五种方式

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了在Activity ...

  8. linux 最快的,五种方式装Linux哪种最快

    mask宇 于 2012-05-20 00:46:44发表: 个人觉得硬盘的传输速率更快 所以悬着硬盘. Hoo_h 于 2012-05-20 00:18:54发表: 想尝试硬盘安装,用过光盘和U盘 ...

  9. Android数据存储五种方式总结

    1 使用SharedPreferences存储数据     2 文件存储数据       3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解 ...

最新文章

  1. 一个撇脚的java压缩文件工具类
  2. 寄存器和常用的汇编指令
  3. 关于数据中台的深度思考与总结,20000 字不到一丢丢。。。
  4. ACM MM 2018论文概述:基于多粒度监督的图像语义物体协同标注
  5. 数据挖掘—Apriori算法(Java实现)
  6. Linux 查看文件指定行数 内容
  7. 货车运输 vijos 1843 NOIP2013 D1T3 最大生成树,并查集,(伪·LCA)
  8. 如何检索Python函数的源代码
  9. js 数字递增递减_js验证连续两位数字递增或递减和连续三位数字相同
  10. select into
  11. ASP net 2 0 中 WebResource axd 管理资源的一些知识点
  12. 在编译器中鼠标光标变成下横线的解决办法
  13. 感知机算法在鸢尾花数据集上的实践
  14. java 在线excel_Java实现最简单的在线打开保存Excel文件
  15. NVIDIA Jetson AGX Xavier 配置pytorch环境,anaconda,Pycharm
  16. 解构destruct
  17. python三维矩阵乘法_tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘
  18. lightroom最新版本下载_Lightroom CC 2019|Lightroom CC 2019 正式版下载_太平洋下载中心...
  19. 百度离线地图示例之二:测距
  20. 去除office非正版提示的方法(转)

热门文章

  1. 古人的名与字、号、讳、谥有什么区别
  2. Linux环境下如何安装达梦数据库
  3. OpenMAX编程-音视频等组件介绍
  4. 使用Qemu在Mac上安装虚拟机
  5. CDGA:应聘数仓岗,选择企业级别 or 算法团队?
  6. 西瓜书课后题——第七章(贝叶斯分类器)
  7. HEVC intra MPM
  8. 计算机夏令营英语自我介绍,保研夏令营英文自我介绍3篇
  9. css中_box的属性包括,css box-sizing 属性
  10. 如何快速在线压缩图片大小(包括放大、缩小图片,指定图片尺寸和压缩图片品质)