zoukankan      html  css  js  c++  java
  • 文件下载

    文件下载
    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;charset=gbk";
    _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;
    }
    调用方法
    ExportExcel excel = new ExportExcel();
    string fileName = excel.Export(dt, "项目统计", DataName);
    string path = Request.PhysicalApplicationPath + "Excel\\" + fileName + ".xls";
    DownFile.ResponseFile(Page.Request, Page.Response, fileName
    + ".xls", path, 1024000);

    没搞清楚到底是什么原理,留下,等以后研究。

  • 相关阅读:
    【转】win8.1下安装ubuntu
    Codeforces 1025G Company Acquisitions (概率期望)
    Codeforces 997D Cycles in Product (点分治、DP计数)
    Codeforces 997E Good Subsegments (线段树)
    Codeforces 1188E Problem from Red Panda (计数)
    Codeforces 1284E New Year and Castle Building (计算几何)
    Codeforces 1322D Reality Show (DP)
    AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
    Codeforces 1305F Kuroni and the Punishment (随机化)
    AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
  • 原文地址:https://www.cnblogs.com/smartsky/p/1880947.html
Copyright © 2011-2022 走看看