zoukankan      html  css  js  c++  java
  • ASP.NET提供文件下载函数

    ASP.NET提供文件下载函数
     作者:佚名  来源:本站整理  发布时间:2005-6-11 0:54:10

    // 输出硬盘文件,提供下载
    // 输入参数 _Request: Page.Request对象, _Response: Page.Response对象, _fileName: 下载文件名, _fullPath: 带文件名下载路径, _speed 每秒允许下载的字节数
    // 返回是否成功
    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;

    int 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(pack));
    Thread.Sleep(sleep);
    }
    else
    {
    i=maxCount;
    }
    }
    }
    catch
    {
    return false;
    }
    finally
    {
    br.Close();
    myFile.Close();
    }
    }
    catch
    {
    return false;
    }
    return true;
    }


    调用例

    Page.Response.Clear();

    bool success = ResponseFile(Page.Request, Page.Response, "filename", @"C:\download.date", 1024000);

    if(!success)
    Response.Write("下载文件出错!");

    Page.Response.End();
  • 相关阅读:
    Working with WordprocessingML documents (Open XML SDK)
    How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
    Azure:Manage anonymous read access to containers and blobs
    Convert HTML to PDF with New Plugin
    location.replace() keeps the history under control
    On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
    HTTP Modules versus ASP.NET MVC Action Filters
    解读ASP.NET 5 & MVC6系列(6):Middleware详解
    Content Negotiation in ASP.NET Web API
    Action Results in Web API 2
  • 原文地址:https://www.cnblogs.com/twttafku/p/1212669.html
Copyright © 2011-2022 走看看