以前一直错误的认为在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# 多线程实例 支持断点续传 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软
Asp.net 2.0 文件下载[支持多线程, 断点续传功能
Asp.net 用c# 实现多线程并发处理,多线程断点续传
Asp.net(c#)实现多线程断点续传 多线程互斥 解压到当前文件夹就有30多兆,再解压一次得到70多兆的源代码,我只有20兆的上传权限,只能压缩两次上传,不过下载后能正常解压没有问题,我试过了,谢谢支持!也希望各位...
在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值...
拓网大文件上传组件是基于Silverlight框架,采用多线程、断点续传技术开发的一套大文件在线上传WEB组件,是国内首个实现在线WEB断点续传的解决方案。使用本组件可以轻松将几G文件上传到服务器,良好的兼容性和通用的...
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. ...
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 ...
摘要:.NET源码,上传下载,上传组件,文件上传 基于Silverlight框架的大文件上传组件,支持断点续传、兼容各大浏览器、支持分布式文件存储,可以轻松将几G文件上传到服务器,与您的系统整合或对接。 组件特点: 1....
拓网大文件上传组件是基于Silverlight框架,采用多线程、断点续传技术开发的一套大文件在线上传WEB组件,是国内首个实现在线WEB断点续传的解决方案。使用本组件可以轻松将几G文件上传到服务器,良好的兼容性和通用的...
FTP、HTTP 多线程断点续传下载文件 源码 如题。 gdiplus应用实例 如题,自绘控件的实现。 gdiplus应用实例2 如题,自绘控件的实现。 GetFileVersion 这个例子就是查询任何可执行文件的版本信息并且 C++builder 和...