`
shirlly
  • 浏览: 1623352 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

【转】ASP.NET文件下载函数

    博客分类:
  • .NET
阅读更多
在你的Page_Load中添加这样的代码:
Page.Response.Clear();
 bool success = ResponseFile(Page.Request, Page.Response, "目的文件名称", @"源文件路径", 1024000);
 if (!success)
     Response.Write("下载文件出错!");
Page.Response.End();


文件下载函数代码为:
public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
    {
        try
        {
            FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader br = new BinaryReader(myFile);
            try
            {
                _Response.AddHeader("Accept-Ranges", "bytes");
                _Response.Buffer = false;
                long fileLength = myFile.Length;
                long startBytes = 0;
     
                double pack = 10240; //10K bytes
                //int sleep = 200;   //每秒5次   即5*10K bytes每秒
                int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
                if (_Request.Headers["Range"] != null)
                {
                    _Response.StatusCode = 206;
                    string[] range = _Request.Headers["Range"].Split(new char[] {'=', '-'});
                    startBytes = Convert.ToInt64(range[1]);
                }
                _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
                if (startBytes != 0)
                {
                    //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
                }
                _Response.AddHeader("Connection", "Keep-Alive");
                _Response.ContentType = "application/octet-stream";
                _Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
             
                br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
                int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;

                for (int i = 0; i < maxCount; i++)
                {
                    if (_Response.IsClientConnected)
                    {
                        _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
                        Thread.Sleep(sleep);
                    }
                    else
                    {
                        i=maxCount; 
                    }
                }
            }
            catch
            {
             return false;
            }
            finally
            {
                br.Close();

                myFile.Close();
            }
        }
        catch
        {
            return false;
        }
        return true;
    }

这样就实现了文件下载时,不管是什么格式的文件,都能够弹出打开/保存窗口.

当弹出来的文件名是乱码的时候,需要在Web.config中加这样的设置
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /><!--解决下载时文件名乱码设置-->


转自:http://www.cnblogs.com/liping13599168/archive/2007/03/12/672025.html
分享到:
评论

相关推荐

    ASP.NET文件下载函数.doc

    ASP.NET文件下载函数.docASP.NET文件下载函数.doc

    ASP.NET下载任意类型文件的函数

    ASP.NET C#下载任意类型文件的函数,可以实现任意类型的文件下载,使用方便

    ASP.NET学习大全

    ASP.NET文件上传程序的源代码.txt Asp.Net中文本换行.txt ASPNET中实现在线用户检测(使用后台守护线程).txt C# 读取计算机CPU,HDD信息.txt DataGrid导出EXCEL的几个方法(WebControl).txt DataGrid的打印预览和...

    asp.net保存信息对象比较

    asp.net保存信息对象比较 里面有对asp.net内函数的详细介绍 ,值得下载

    asp.net学习大全(超全面的资料整合)

    ASP.NET文件上传程序的源代码.txt Asp.Net中文本换行.txt ASPNET中实现在线用户检测(使用后台守护线程).txt C# 读取计算机CPU,HDD信息.txt DataGrid导出EXCEL的几个方法(WebControl).txt DataGrid的打印预览和...

    asp.net开发常用整理集合

     Asp.Net中FileUpload上传文件  Asp.Net中WebServices的使用  Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net...

    基于ASP.NET实现文件和数据的下载

    介绍了在ASP.NET下实现文件和数据下载的方法。并给出了相应的函数实现。可以很快应用到项目开发中

    ASP.NET基础控件-教程

     Asp.Net中FileUpload上传文件  Asp.Net中WebServices的使用  Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取...

    asp.net后台弹出层,asp.net后台调用前台JS事件

    这是一个用于as.net网页的弹出层对话框的实例,原本弹出提示可以使用alert&#40;'lcng'&#41;,但是由于不太友好,而且不太美观,后来才想自己做一个,当然了网上也有许多弹出对话框的jquery插件,不过平常使用的时候...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    flex(flash)文件上传,完全仿网易邮箱,内含asp.net实例

    //uploadAction:处理上传文件的网页 //uploadParam:处理上传文件的网页所接收的参数 //ItemDate:单个文件大小控制,单位是字节 //TotalDate:一次上传的文件总大小控制,单位是字节 //TotalCount:一次上传文件的数量...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    这样ASP.NET就有四种组合:VB+ACCESS,VB+SQL,C#+ACCESS,C#+SQL,本教程会使用C#+ACCESS,兼顾四种来写,让大家对ASP.NET有一个全面的认识。虽然说学习ASP.NET不需要任何ASP基础,但是我觉得如果大家ASP不会,还是...

    ASP.NET中的STREAMREADER对象总结

    ASP.NET中的STREAMREADER对象总结  前面我介绍了file和filestream,我介绍system.io空间下的这些对象目的是为后面讲解如何制作asp.net计数器打下伏笔。呵呵,下面继续讲解StreamReader对象。    streamreader对象...

    asp.net 文件下载功能函数代码整理

    asp.net下文件下载功能代码,fullFilename 要下载的文件的路径+文件名,需要的朋友可以参考下。

    ASP.NET程序开发范例宝典 第19章 综合实例

    内容包括搭建ASP.NET开发环境、HTML开发与实践、CSS样式与JavaScript脚本应用、常用Web服务器控件、验证控件、高级Web服务器控件、ADO.NET技术、数据绑定技术、SQL查询相关技术、视图、存储过程及触发器的应用、ASP...

    ASP.NET 控件的使用

    第一部分 构建ASP.NET页面 第1章 ASP.NET Framework概览 2 1.1 ASP.NET和.NET Framework 5 1.1.1 框架类库 5 1.1.2 公共语言运行库 9 1.2 ASP.NET控件 10 1.2.1 ASP.NET控件概览 11 1.2.2 HTML控件 12 1.2.3 理解...

    asp.net专家疑难解答200问

    如何备份和恢复数据库 第9章 ASP.NET安全策略 第10章 常用功能及函数集 180.如何在ASP.NET中获得客户端IP地址 181.如何取得一定范围内的随机数 182.如何取得文件的扩展名示例一 182.如何...

    Asp.net实现多语言Demo.rar

    我实现多语言是利用了ASP.NET2.0的资源文件,其实据我所知除了资源文件的方式,在数据库里面建多个表中进行一个区域文化映射,也是解决国际化的一种方式(关于这种方式感兴趣的朋友可以自己试试) 现在我把实现国际化...

    asp.net学习积累的代码段

    Asp.Net中使用水晶报表 javascript提示类 分页 类 数据绑定 数据库方面 文件操作 验证码 ASP.NET 2.0高级控件之FileUpload控件.txt ASP.NET 程序中常用的三十三种代码.txt asp.net使用客户端验证.txt Asp.net中基于...

    ASP.NET.4揭秘

    asp.net 4揭秘.第1卷》 第一部分 构建asp.net页面 第1章 asp.net framework概览2 1.1 asp.net和.net framework5 1.1.1 框架类库5 1.1.2 公共语言运行库10 1.2 asp.net控件11 1.2.1 asp.net控件概览11 1.2.2 html控件...

Global site tag (gtag.js) - Google Analytics