首页 > 编程 > .NET > 正文

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

2024-07-10 13:07:19
字体:
来源:转载
供稿:网友

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;

  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
}


 

最大的网站源码资源下载站,

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表