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

  • 相关阅读:
    System.Web.HttpRequestValidationException——从客户端检测到危险的Request值
    SignalR 实现web浏览器客户端与服务端的推送功能
    MVC4项目中验证用户登录一个特性就搞定
    C# winform 上传文件到服务器
    解决memcached不能远程访问的问题
    MVC4验证用户登录特性实现方法
    IIS增加并发数
    IIS处理并发请求时出现的问题及解决
    jQuery使用ajax跨域获取数据
    jQuery调用WCF服务传递JSON对象
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2485775.html
Copyright © 2020-2023  润新知