`
shirlly
  • 浏览: 1651724 次
  • 性别: 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文件下载函数。 首先,我们来看一下关键的代码片段: ```csharp // 在响应事件中调用下载函数 Page.Response.Clear(); bool success = ResponseFile(Page...

    asp.net 文件下载demo

    在这个"asp.net 文件下载demo"中,我们将会探讨如何在ASP.NET 3.5环境下实现安全的文件下载,同时通过文件路径的加密保护来增强安全性。 首先,让我们了解文件下载的基本流程。在ASP.NET中,你可以通过HTTP响应对象...

    asp.net文件上传示例

    ASP.NET文件上传是Web开发中的常见功能,尤其在企业级应用和社交网络中,用户可能需要上传图片、文档等各类文件。在这个“asp.net文件上传示例”中,我们可以学习到如何在ASP.NET环境中实现这一功能。这个示例是用...

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

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

    asp.net C# 利用FTP 远程下载文件

    在ASP.NET应用中,你可以在HTTP请求处理程序(如ASP.NET MVC的控制器或ASP.NET Core的API控制器)中调用此`DownloadFileFromFTP`函数,根据用户请求动态下载不同的文件。确保在Web应用程序的配置中正确设置权限,...

    asp.net 批量上传文件

    在ASP.NET中实现批量文件上传是一项常见的需求,尤其在处理大量用户数据时。在这个场景下,我们可以使用jQuery库中的`jquery.form`插件来增强页面的交互性,并结合ASP.NET后端技术,实现异步、无刷新的批量文件上传...

    ASP.NET回调函数

    ASP.NET回调函数是一种技术,它允许用户在不重新加载整个页面的情况下与服务器进行交互,从而实现无刷新的数据更新。这种技术极大地提升了用户体验,因为它减少了页面的加载时间和网络流量,尤其适用于实时数据更新...

    asp.net+Ajax实现Excel文件导出

    本篇文章将详细讲解如何利用ASP.NET与Ajax技术实现在Web应用中导出Excel文件。 首先,ASP.NET是Microsoft开发的一个用于构建动态网站、Web应用程序和服务的框架。它基于.NET Framework,提供了丰富的服务器控件、...

    asp.net文件上传带进度条

    1. **ASP.NET文件上传基础**: ASP.NET提供了多种文件上传方式,如HTML `&lt;input type="file"&gt;` 元素配合Form表单提交,或者使用控件如ASP.NET FileUpload控件。但是,这两种方法都无法在上传过程中显示进度条。 2....

    ASP.NET教程 打包下载

    ASP.NET教程打包下载资源包含五个幻灯片和一个Word文档,是学习和复习.NET程序设计,特别是ASP.NET技术的理想资料。这些文件详细介绍了从基础到高级的ASP.NET开发知识,涵盖了从HTML语言到Web Form编程,再到数据...

    asp.net读写dbf文件

    在ASP.NET中读写DBF文件是一项常见的任务,特别是在处理历史数据或与旧系统集成时。DBF文件是FoxPro、dBase等数据库系统使用的格式,存储结构化的表格数据。 首先,我们需要引入能够操作DBF文件的库。.NET ...

    .net 常用函数和代码

    接下来,“asp.net常用函数表.doc”则可能涉及到ASP.NET,这是一个用于构建Web应用程序的.NET框架子集。这个文档可能列出了在ASP.NET开发中常用的服务器端控件、方法和属性。比如,Response.Write()用于向客户端发送...

    asp.net函数

    本电子图书聚焦于ASP.NET中的函数集,旨在帮助开发者更好地理解和掌握ASP.NET编程的核心技巧。 1. **页面生命周期函数**: - `Page_Load`:页面加载事件,用于初始化控件和数据绑定。 - `Page_Init`:页面初始化...

    ASP.NET 文件批量上传FlashUpload示例源码

    ASP.NET 文件批量上传技术在开发Web应用程序时常常被用到,尤其在用户需要上传大量文件的场景下。FlashUpload是一款适用于ASP.NET平台的文件批量上传组件,它利用Flash技术实现多文件选择和上传,提高了用户体验并...

    asp.net 2.0常用函数表

    在这个“asp.net 2.0常用函数表”中,我们可能会找到一系列用于简化ASP.NET 2.0开发过程的函数和方法。 1. **Response对象**:在ASP.NET中,Response对象是HttpServerUtility类的一个实例,用于向客户端发送数据。...

    asp与asp.net转换工具

    - 检查转换后的ASP.NET代码,确保所有功能都能正常工作,尤其是复杂的逻辑和自定义函数。 - 测试转换后的应用程序,确认其在新的平台上性能和兼容性是否符合预期。 - 针对转换工具可能无法处理的特定情况,如自定义...

    asp.net 文本文件的拖放操作源码

    在ASP.NET开发中,实现文本文件的拖放操作可以极大地提升用户体验,使用户能够更加直观、便捷地上传文件。本文将详细讲解如何在ASP.NET环境中使用VB.NET编写拖放功能,特别是针对文本文件的处理。 首先,理解拖放...

    Asp.Net上传和下载

    本实例将探讨如何在Asp.Net环境下实现文件的上传和下载,这对于初学者来说是一个很好的学习起点。 首先,`Default.aspx`是网站的默认页面,它通常包含了用户界面元素,如文件上传控件(`FileUpload`)和提交按钮。`...

    ASP.NET资料库

    "Asp.NET 操作配置文件.doc"文件可能讲解了如何在ASP.NET中读取和修改应用程序的配置文件(web.config)。ASP.NET允许开发者通过ConfigurationManager类访问配置文件,进行设置的读取和更新,如数据库连接字符串、...

    asp.net大文件上传(批量)

    首先,我们需要了解ASP.NET文件上传的基本原理。在ASP.NET中,文件上传是通过HttpPostedFileBase对象来处理的,它包含了上传文件的相关信息,如文件名、类型、长度等。但是,由于HTTP协议本身的限制,单个请求不能...

Global site tag (gtag.js) - Google Analytics