上篇博客也说了下C#中通过XML导出Excel,这些文件操作都挺有用的,下面是文件的下载,之前做项目都是把它写的空间日志中,以后有时间了把它们都弄出来

先把有问题的代码贴出来吧

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;namespace infoPlatClient.NetDisk
{public partial class downLoad : Com.DRPENG.Common.WebStruct.BaseForm{/// <summary>/// 取得要下载文件的路径/// </summary>private string fileRpath{get{return Request["fileRpath"] == null ? "" : Request["fileRpath"];}}/// <summary>/// 取得要下载文件的名称/// </summary>protected void Page_Load(object sender, EventArgs e){if (!IsPostBack)this.DownloadFile();}public void DownloadFile(){Response.ClearHeaders();Response.Clear();Response.Expires = 0;Response.Buffer =true;Response.AddHeader("Accept-Language", "zh-tw");string name = System.IO.Path.GetFileName(fileRpath);System.IO.FileStream files = new FileStream(fileRpath, FileMode.Open, FileAccess.Read, FileShare.Read);byte[] byteFile=null;if (files.Length == 0){byteFile=new byte[1];}else{byteFile = new byte[files.Length];}files.Read(byteFile, 0, (int)byteFile.Length);files.Close();Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));Response.ContentType = "application/octet-stream;charset=gbk";Response.BinaryWrite(byteFile);Response.End();}}
}之前一直用这种下载方式,可是有一次用户上传了一个700Mb的文件时报内存溢出的问题,分析了一下原因,用户的内存只有256M,而下载文件时要创建内存流,导致了内存溢出。解决方案:1>WriteFile分块下载,就是每次下载指定数量的多件;2>通过超链接的方式;lblDownLoad.Text = "<a href='" + drv["VPath"].ToString() + "'>下载</a>"下面是四种实现文件下载的方式:using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;public partial class _Default : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){}//TransmitFile实现下载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/z.zip");Response.TransmitFile(filename);}//WriteFile实现下载protected void Button2_Click(object sender, EventArgs e){/*using System.IO;*/string fileName ="asd.txt";//客户端保存的文件名string filePath=Server.MapPath("DownLoad/aaa.txt");//路径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.txt";//客户端保存的文件名string filePath = Server.MapPath("DownLoad/aaa.txt");//路径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.txt";//客户端保存的文件名string filePath = Server.MapPath("DownLoad/aaa.txt");//路径//以字符流的形式下载文件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();}
}

转载于:https://www.cnblogs.com/Harbour9354/p/8488502.html

C#实现文件下载的几种方式相关推荐

  1. java 下载 docx文件_Java文件下载的几种方式.docx

    Java文件下载的几种方式文章分类:/blogs/category/javaJava编程 Java文件下载的几种方式Java代码 public?HttpServletResponse?download ...

  2. PHP实现文件下载的两种方式(GuzzleHttp和Curl)

    PHP实现文件下载的两种方式分别使用GuzzleHttp扩展和Curl扩展来实现.本例以下载PDF文件为例,实际上大家可以举一反三下载其他文件格式是一样的. 1.使用GuzzleHttp 扩展库 us ...

  3. java下文_java实现文件下载的两种方式

    本文实例为大家分享了java实现文件下载的具体代码,供大家参考,具体内容如下 public HttpServletResponse download(String path, HttpServletR ...

  4. 前端vue中文件下载的几种方式

    第一种方式是前端创建超链接,通过a标签的链接向后端服务发get请求,接收后端的文件流,非常简单: <a :href='"/user/downloadExcel"' >下 ...

  5. java struts2下载文件_java struts2入门学习---文件下载的二种方式

    一.关于文件下载: 文件下载的核心思想即是将文件从一个地方拷贝到另一个地方. 1.传统方式: 在Action中加入大量servlet api 操作.优点是好理解,缺点是耦合度高. 2.stream方式 ...

  6. asp.net 文件下载的五种方式

    需求:下载站点目录下DownLoad文件夹中的logo.zip 前端HTML代码部分: <div>1.通过超链接下载:<a href="../DownLoadFiles/l ...

  7. 关于Ajax无法下载文件到浏览器本地的问题(文件下载的几种方式)

    最近在做网站的时候遇到这样一个功能,在如图所示的页面中,需要用户点击链接的时候,能够以异步Ajax的方式判断服务器中是否存储有相应的Excel文件,如果没有的话就提示用户没有找到,如果有的话就下载到用 ...

  8. 使用WebView实现文件下载的两种方式

    在应用中,通常会使用到文件下载功能,一般我们都是写一个下载操作工具类,在异步任务中执行下载功能. 今天我们来看下如何使用WebView的文件下载功能!方法1,自定义下载操作 1. 先来布局<Re ...

  9. java实现文件下载的两种方式6_struts2实现文件下载功能

    本文实例为大家分享了struts2下实现文件下载功能,供大家参考,具体内容如下 下面以实现一个图片下载功能为例: 1. 项目结构 2. web.xml xmlns="http://java. ...

最新文章

  1. 基于自适应策略转移的深度强化学习
  2. VS2005新建应用工程出错解决方法
  3. boost::math::tools::cohen_acceleration用法的测试程序
  4. Java Longest Palindromic Substring(最长回文字符串)
  5. 算法 --- 回溯法
  6. python万年历时钟_python实现万年历类calendar
  7. java类的命名规范_一篇搞定Java命名规范
  8. java 容易犯错_写Java程序最容易犯错误有哪些呢?
  9. 从零开始搭建公司后台技术栈,这套架构绝了...
  10. 市场对php的需求分析,PHP 留言板功能需求分析
  11. 浙江大学-西湖大学联合培养博士生
  12. JVM致命错误日志 hs_err_pid.log的分析
  13. sublime-text-3-build-3207 破解+注册码
  14. 逆水寒服务器维护中,逆水寒维护到几点今天 逆水寒11.1更新了什么
  15. [28期] 坚定信念,抗战二十年
  16. PTA:修理牧场(哈夫曼算法)
  17. 依赖注入框架-dragger2
  18. linux系统字符设备文件类型,Linux文件类型以及颜色标识
  19. 【机器学习】详解 转置卷积 (Transpose Convolution)
  20. SQL Server 查看被锁的表

热门文章

  1. Framework学习(一)深入Android 系统架构
  2. 业务逻辑全写在sql_12306的业务逻辑很复杂么?一条SQL语句搞不定?
  3. Java操作itext,寻找给定关键字,并且进行页面抽取和页面盖章两个操作
  4. 白噪音和粉红噪音煲机_白噪音信号的概念及基本理论
  5. 【算法】剑指 Offer 58 - I. 翻转单词顺序
  6. 【Flink】flink Operator State 的使用及Redistribute listState UnionListState
  7. 【Elasticsearch】你看懂 Elasticsearch Log 中的 GC 日志了吗?
  8. 【java】java 并发编程 ArrayBlockingQueue
  9. 【Kafka】Kafka使用代码设置offset值
  10. 【Kafka】kafka AdminClient API