• 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! C#/ASP.Net 实现! 转


    使用该 URL  http://localhost/WebApplicationX/WebForm1.aspx  在 Flashget 中下载

    切换 暂停/开始 , 并增加下载的块数 测试!

    原理参见上一篇 blog JSP/Servlet 实现版: 

    http://blog.csdn.net/playyuer/archive/2004/07/30/56538.aspx

    利用该原理不难实现支持数据库大字段的断点续传多线程链接的下载!

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    public class WebForm1 : System.Web.UI.Page
    {
     private void Page_Load(object sender, System.EventArgs e)
     {

      string s  = @"e:\northwind.mdb";
      s = @"I:\\SetupRes\\Sun\\j2re-1_4_2_05-windows-i586-p.exe";
      System.IO.Stream S = new System.IO.FileStream(s, System.IO.FileMode.Open, System.IO.FileAccess.Read,System.IO.FileShare.Read);

      long p = 0;

      long l = new System.IO.FileInfo(s).Length;

     Response.AddHeader("Accept-Ranges","bytes");

      if (Request.Headers["Range"] != null)
      {
       Response.StatusCode = 206;
       //p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
       //此处修改未征得原作者同意,还请见谅!(源自宝玉的建议)
       string range = Request.Headers["Range"];
       range = range.Replace("bytes=","");
       p = long.Parse( range.Substring(0, range.IndexOf("-"))); 
      }

      Response.AddHeader("Content-Length", ((long)(l - p)).ToString()  );

      if (p != 0)
      {
       //不是从最开始下载,
       //响应的格式是:
       //Content-Range: bytes [文件块的开始字节]-[文件的总大小 - 1]/[文件的总大小]
       Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(l - p)).ToString() + "/" + l.ToString());
      }

      Response.ContentType = "application/octet-stream";    
      Response.AddHeader("Content-Disposition", "attachment; filename="  +  System.IO.Path.GetFileName(s));

      S.Position = p;

      int i = 1;
      byte[] b = new Byte[1024];
      while (i > 0)
      {
       i = S.Read(b, 0, b.Length);
       Response.OutputStream.Write(b, 0, i);
      }

      S.Close();
      Response.End();
     }
     #region Web 窗体设计器生成的代码
     override protected void OnInit(EventArgs e)
     {
      //
      // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
      //
      InitializeComponent();
      base.OnInit(e);
     }
      
     ///


     /// 设计器支持所需的方法 - 不要使用代码编辑器修改
     /// 此方法的内容。
     ///
     private void InitializeComponent()
     {
      this.Load += new System.EventHandler(this.Page_Load);
     }
     #endregion
    }



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=58430

  • 相关阅读:
    css3软键盘不盖住输入框的方法
    php strpos注意的地方
    swoole不断的切换前端链接方法 防止攻击
    mysql cpu使用率过高解决方法
    caffe(9) caffe例子
    affe(8) solver 优化方法
    caffe(7) solver及其配置
    caffe(6) Blob,Layer,Net 以及对应配置文件的编写
    caffe(5) 其他常用层及参数
    caffe(4) 激活层(Activation Layers)及参数
  • 原文地址:https://www.cnblogs.com/wpwen/p/371948.html
Copyright © 2020-2023  润新知