• 使文件下载的自定义连接支持 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("-",""));
      }

      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
    }

  • 相关阅读:
    Netty与Spring Boot的整合
    Activiti 5.22.0 之自由驳回任务实现(亲测)
    学习机器学习前你应该要知道的一些事
    机器学习中调参的基本思想
    机器学习和深度学习区别的简要概述
    SKlearn中分类决策树的重要参数详解
    世界第二大软件国家如何看待人工智能、机器学习和大数据
    sklearn中的数据预处理和特征工程
    人工智能革命:人类永生还是灭亡(下)
    人工智能革命:人类永生还是灭亡(中)
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2485775.html
Copyright © 2020-2023  润新知