asp.net 下载文件几种方式

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/aaa.zip");

Response.TransmitFile(filename);

}

//WriteFile实现下载

protected void Button2_Click(object sender, EventArgs e)

{

/*

using System.IO;

*/

string fileName ="aaa.zip";//客户端保存的文件名

string filePath=Server.MapPath("DownLoad/aaa.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();

}

//WriteFile分块下载

protected void Button3_Click(object sender, EventArgs e)

{

string fileName = "aaa.zip";//客户端保存的文件名

string filePath = Server.MapPath("DownLoad/aaa.zip");//路径

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.zip";//客户端保存的文件名

string filePath = Server.MapPath("DownLoad/aaa.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();

}

最后分享一个控件,详细资料可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/28/net%e6%96%87%e4%bb%b6%e6%89%b9%e9%87%8f%e4%b8%8b%e8%bd%bd/

最新文章

  1. 利用python将二值csv格式转换为矩阵
  2. Web jquery表格组件 JQGrid 的使用 - 11.问题研究
  3. Leetcode 3Sum Closest
  4. Centos下MySQL主从同步配置
  5. java之DatagramSocket、DatagramPackage丶MulticastSocket 广播学习
  6. Android画图Path的使用
  7. 第3条:用私有构造器或者枚举类型强化Singleton属性
  8. apache开源项目--thrift
  9. nyoj开心的小明
  10. osg添加纹理示例
  11. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSessionRepositoryFilter' is defined
  12. 完美解决cannot resolve symbol servlet 的报错
  13. centos7下kubernetes(13。kubernetes-探讨service IP)
  14. ajax 防止重复提交
  15. MySQL 5.6 Index Condition Pushdown
  16. SQL将原始数据进行MD5加密转存
  17. 解决 django 博客归档 “Are time zone definitions for your database and pytz installed?”的错误
  18. flex学习园地
  19. Linux 目录结构及文件基本操作
  20. FT项目开发技术点(四)

热门文章

  1. XSS-DOM型
  2. ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
  3. Java Web - 笔记(1)
  4. 【2019CSP-S游记】咕了好久了撒
  5. 洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题解
  6. echarts图标使用(一)
  7. Paxos协议理解
  8. jmeter强大的扩展插件!!
  9. CentOS 7 安装MongoDB 4.0
  10. python初始装饰器