`
webcode
  • 浏览: 5954904 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Asp.net(c#)实现多线程断点续传

 
阅读更多
以前一直错误的认为在ASP.NET中无法通过编程方式实现多线程断点续传,今天终于获得了这样一个解决方案,让我明白要学习的东西还很多
此解决方案基于其它解决方案及相关资料,根据我自己的理解改进.如有错漏,请尽管指出;如有其它更好的解决方案,请推荐一下,感谢先。

System.IO.StreamiStream=null;

//Buffertoread10Kbytesinchunk:
byte[]buffer=newByte[10240];

//Lengthofthefile:
intlength;

//Totalbytestoread:
longdataToRead;

//Identifythefiletodownloadincludingitspath.
stringfilepath=@"E:/software/SQLServer2000PersonalEdition.ISO";

//Identifythefilename.
stringfilename=System.IO.Path.GetFileName(filepath);

try
{
//Openthefile.
iStream=newSystem.IO.FileStream(filepath,System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Response.Clear();

//Totalbytestoread:
dataToRead=iStream.Length;

longp=0;
if(Request.Headers["Range"]!=null)
{
Response.StatusCode
=206;
p
=long.Parse(Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}

if(p!=0)
{
Response.AddHeader(
"Content-Range","bytes"+p.ToString()+"-"+((long)(dataToRead-1)).ToString()+"/"+dataToRead.ToString());
}

Response.AddHeader(
"Content-Length",((long)(dataToRead-p)).ToString());
Response.ContentType
="application/octet-stream";
Response.AddHeader(
"Content-Disposition","attachment;filename="+System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));

iStream.Position
=p;
dataToRead
=dataToRead-p;
//Readthebytes.
while(dataToRead>0)
{
//Verifythattheclientisconnected.
if(Response.IsClientConnected)
{
//Readthedatainbuffer.
length=iStream.Read(buffer,0,10240);

//Writethedatatothecurrentoutputstream.
Response.OutputStream.Write(buffer,0,length);

//FlushthedatatotheHTMLoutput.
Response.Flush();

buffer
=newByte[10240];
dataToRead
=dataToRead-length;
}

else
{
//preventinfiniteloopifuserdisconnects
dataToRead=-1;
}

}

}

catch(Exceptionex)
{
//Traptheerror,ifany.
Response.Write("Error:"+ex.Message);
}

finally
{
if(iStream!=null)
{
//Closethefile.
iStream.Close();
}
Response.End();
}


本解决方案所参考的资料链接列表(在此对作者表示感谢):
http://blog.csdn.net/playyuer/archive/2004/08/02/58430.aspx
http://www.httpsniffer.com/http/1416.htm
http://support.microsoft.com/default.aspx?scid=kb;en-us;812406&Product=aspnet


分享到:
评论

相关推荐

    C# 多线程实例 支持断点续传

    C# 多线程实例 支持断点续传 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软

    Asp.net 2.0 文件下载[支持多线程, 断点续传功能

    Asp.net 2.0 文件下载[支持多线程, 断点续传功能

    多线程断点

    Asp.net 用c# 实现多线程并发处理,多线程断点续传

    C#技术大全带源代码

    Asp.net(c#)实现多线程断点续传 多线程互斥 解压到当前文件夹就有30多兆,再解压一次得到70多兆的源代码,我只有20兆的上传权限,只能压缩两次上传,不过下载后能正常解压没有问题,我试过了,谢谢支持!也希望各位...

    asp.net知识库

    在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值...

    拓网超大文件上传组件

    拓网大文件上传组件是基于Silverlight框架,采用多线程、断点续传技术开发的一套大文件在线上传WEB组件,是国内首个实现在线WEB断点续传的解决方案。使用本组件可以轻松将几G文件上传到服务器,良好的兼容性和通用的...

    亮剑.NET深入体验与实战精要2

    4.10 进程与多线程的区别 190 4.11 创建多线程应用程序 191 4.12 WinForm开发常见问题 194 4.12.1 如何设置运行时窗体的起始位置 194 4.12.2 如何使一个窗体在屏幕的最顶端 194 4.12.3 实现窗体渐显效果 194 4.12.4 ...

    大文件上传组件

    3. 支持ASP,JSP,C#,VB.NET,PHP等多种后台开发语言,与第三方系统整合方便。 4. 文件上传,可以一次按顺序上传多个超大文件。 5. 组件完全采用多线程方式上传,达到更高性能。 6. 支持进度事件信息及百分比显示。 7. ...

    亮剑.NET深入体验与实战精要3

    4.10 进程与多线程的区别 190 4.11 创建多线程应用程序 191 4.12 WinForm开发常见问题 194 4.12.1 如何设置运行时窗体的起始位置 194 4.12.2 如何使一个窗体在屏幕的最顶端 194 4.12.3 实现窗体渐显效果 194 4.12.4 ...

    拓网ASP.NET大文件上传组件 v1.0

    摘要:.NET源码,上传下载,上传组件,文件上传 基于Silverlight框架的大文件上传组件,支持断点续传、兼容各大浏览器、支持分布式文件存储,可以轻松将几G文件上传到服务器,与您的系统整合或对接。  组件特点:  1....

    拓网大文件上传组件 v1.0

    拓网大文件上传组件是基于Silverlight框架,采用多线程、断点续传技术开发的一套大文件在线上传WEB组件,是国内首个实现在线WEB断点续传的解决方案。使用本组件可以轻松将几G文件上传到服务器,良好的兼容性和通用的...

    vc++ 开发实例源码包

    FTP、HTTP 多线程断点续传下载文件 源码 如题。 gdiplus应用实例 如题,自绘控件的实现。 gdiplus应用实例2 如题,自绘控件的实现。 GetFileVersion 这个例子就是查询任何可执行文件的版本信息并且 C++builder 和...

Global site tag (gtag.js) - Google Analytics