ASP.NET中下载文件的几种方法

2008年5月27日17:44:07
//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();
    }

 

//----------------------------------------------------------

 

 

public void DownloadFile( System.Web.UI.Page WebForm,String FileNameWhenUserDownload ,String FileBody )
{

  WebForm.Response.ClearHeaders();
  WebForm.Response.Clear();
  WebForm.Response.Expires = 0;
  WebForm.Response.Buffer = true;
  WebForm.Response.AddHeader("Accept-Language", "zh-tw");
  //'文件名称
  WebForm.Response.AddHeader("content-disposition", "attachment; filename='"+System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8)+"'");
  WebForm.Response.ContentType = "Application/octet-stream";
  //'文件内容
  WebForm.Response.Write(FileBody);//-----------
    WebForm.Response.End();
}


//上面这段代码是下载一个动态产生的文本文件,若这个文件已经存在于服务器端的实体路径,则可以通过下面的函数:

public void DownloadFileByFilePath( System.Web.UI.Page WebForm,String FileNameWhenUserDownload ,String FilePath )
{
  WebForm.Response.ClearHeaders();
  WebForm.Response.Clear();
  WebForm.Response.Expires = 0;
    WebForm.Response.Buffer = true;
  WebForm.Response.AddHeader("Accept-Language", "zh-tw");
  //文件名称
  WebForm.Response.AddHeader("content-disposition", "attachment; filename='" + System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) +"'" );
  WebForm.Response.ContentType = "Application/octet-stream";
  //文件内容
  WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath));//---------
  WebForm.Response.End();
}

转载于:https://www.cnblogs.com/bluedy1229/archive/2008/05/27/1208597.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cad中线段求和lisp_cad中连续线段变更圆滑弧形

下面我们就来看看如何在CAD中怎么把JPG图片插入页面中,并把图片中的图形做出线描的效果呢?这里我们用到CAD编辑工具来对此项功能以演示。方法/步骤首先我们要在电脑中安装CAD编辑工具来实现此操作。打开CAD软件。在菜单栏里找到插入命令,并在…

CF1142C U2(计算几何,凸包)

题目大意:平面上有 $n$ 个点,第 $i$ 个点是 $(x_i,y_i)$。问有多少条抛物线(二次项系数为 $1$),经过这些点中不同的两个点,并且内部(不含边界)没有任何这些点。重合的抛物线只算一次…

[html] web workers有用过吗?能帮我们解决哪些问题?

[html] web workers有用过吗?能帮我们解决哪些问题? 提供协程能力,如果有一个比较密集的计算任务,可以放到另一个进程中处理,等处理好了再把结果传回主程,这样主要进程就不会阻塞,页面可以正常…

计算机单词修改是否正确,计算机组装必懂的53个单词及装机步骤51条.doc

计算机组装必懂的53个单词及装机步骤51条2007-05-26 11:43计算机组装必懂的53个单词及装机步骤51条计算机组装DIY(Do It Yourself)至少要看懂的五十三个英文单词和缩写也许英语单词对大部分的电脑玩家不算是很困难的,但是对于一些老年用户来说,这些英语单…

matlab 矩阵jocobi迭代_第6章 解线性方程组的迭代法(基于MATLAB)

前面我们已经知道对于线性方程组,一般有两种数值解法:直接法和迭代法。直接法前面已经写过了,没看的同学可以移步阅读:直接法。本次主要讲述迭代法及其相应的MATLAB代码。考虑线性方程组当 为低阶稠密阵时一般采取直接法进行求解。…

全文服务(Microsoft 搜索)不可用。系统管理员必须启动此服务

全文服务(Microsoft 搜索)不可用。系统管理员必须启动此服务。1.打开sql server服务管理器 2.在服务下拉框中选microsoft seardh 3.点启动 4.并选中当启动os时自动启动服务 转载于:https://www.cnblogs.com/Kennytian/archive/2008/05/30/1210418.html

防火墙架构解析

防火墙本身就是一台为网络而设计的计算机,与通用计算机一样防火墙是由硬件和软件组成,现今防火墙有着多种硬件技术架构,不同的硬件架构有着各自不同的特点。先说明一下什么是处理器体系结构和体系架构。体 系 架 构 :CPU架构是CPU…

[html] 你有了解HTML5的地理定位吗?怎么使用?

[html] 你有了解HTML5的地理定位吗?怎么使用? var xdocument.getElementById("demo"); function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { x.innerHTML"该浏览…

apache 修改服务器配置,Apache服务器配置全攻略

在使用子进程处理HTTP请求的Web服务器上,由于要首先生成子进程才能处理客户的请求,因此反应时间就有一点延迟。但是,Apache服务器使用了一个特殊技术来摆脱这个问题,这就是预先生成多个空余的子进程驻留在系统中,一旦有…

易驾佳智能机器人教练_机器人教练创始人马宏先生受邀到中国人民大学进行经验分享...

4月2日,北京易驾佳信息科技有限公司创始人、机器人教练创始人马宏先生受邀前往中国人民大学,与MBA在学学生分享企业经营管理经验。从个人创业发展历程、多年来对驾培行业的洞察及转型升级方向等方面与大家进行了分享、交流。期间,马宏先生跟大…

[html] 说说你对<meta>标签的理解

[html] 说说你对标签的理解 设置meta标签 设置页面长串数字不与跳转防止长串数字电话或以邮箱的形式外链出去 ## 设置meta标签 IE适配用于IE浏览器的适配 设置meta标签 移动端IOS用于适配苹果手机,用于全屏显示 设置meta标签 清除页面缓存Cache-Control头域Cache-C…

实现控件的随意拖动

因为客户要求程序要在浏览器上运行,但是这些信息(这个程序只在政府某部门内部使用)并不需要公开,所以我们选择使用Windows应用程序,并将该程序嵌入到网页中。。。。 就我个人做的这部分简单的说下,我负…

导出sql文件_(一)SQL基本知识

一 、SQL的特点1.综合统一:SQL集数据定义语言DDL、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生 命周期中的全部活动(定义关系模式,插入数据,建立数据库;对数据库中的数据进 行查询和更…

文件下载时,文件名乱码问题

文件下载时,解决不同浏览器文件名乱码问题 public static String encodeFileName(HttpServletRequest request, String pFileName) {String userAgent request.getHeader("USER-AGENT");try {if (userAgent.contains("msie") || userAgent.con…

[html] 说说你对影子(Shadow)DOM的了解

[html] 说说你对影子(Shadow)DOM的了解 web component的API,用来给组件创建子DOM树,就像楼上说的,不受外部style影响,外部通过选择器查询也不会查到里面来。它有两种模式 open和closed,open模式可以获取shadow root&a…

的引用_左值、右值、左值引用、右值引用

【导读】:本文主要详细介绍了左值、右值、左值引用、右值引用以及move、完美转发。左值和右值左值(left-values),缩写:lvalues右值(right-values),缩写:rvalues直接上官网查,我一向倡导自己去懂得原理&…

常用的开始→运行→输入命令集锦

gpedit.msc-----组策略sndrec32-------录音机Nslookup-------IP地址侦测器explorer-------打开资源管理器logoff---------注销命令tsshutdn-------60秒倒计时关机命令lusrmgr.msc----本机用户和组services.msc---本地服务设置oobe/msoobe /a----检查XP是否激活notepad--------打…

小白兔生小白兔-菲波拉契数列问题

有一对小白兔,从出生后第3个月起每个月都生一对小白兔,小白兔长到第三个月后每个月又生一对小白兔,假如小白兔都不死,问每个月的小白兔总数为多少? 这道题是典型的斐波拉切数列问题,其特点就是从第三列开始就等于前两列之和,算法:…

[html] 解释下你对GBK和UTF-8的理解?并说说页面上产生乱码的可能原因

[html] 解释下你对GBK和UTF-8的理解?并说说页面上产生乱码的可能原因 gbk和utf8的理解我们这里将以最简单最容易理解的方式来描述GBK和UTF8的区别,以及它们分别是什么。GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中…

控制反转_Spring:IOC 控制反转

Spring 概述Spring 是什么Spring 是分层的 Java SE/EE 应用 full-stack (全栈式) 轻量级开源框架。全栈式:对各种主流技术和框架都进行了整合,同时对三层架构都提供解决方案。轻量级和重量级的划分主要依据就是看它使用了多少服务,启动时需要…