Asp.net(c#)实现多线程断点续传
生活随笔
收集整理的這篇文章主要介紹了
Asp.net(c#)实现多线程断点续传
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html
以前一直錯誤的認為在ASP.NET中無法通過編程方式實現多線程斷點續傳,今天終于獲得了這樣一個解決方案,讓我明白要學習的東西還很多。
此解決方案基于其它解決方案及相關資料,根據我自己的理解改進.如有錯漏,請盡管指出;如有其它更好的解決方案,請推薦一下,感謝先。
????????????//?Buffer?to?read?10K?bytes?in?chunk:
????????????byte[]?buffer?=?new?Byte[10240];
????????????//?Length?of?the?file:
????????????int?length;
????????????//?Total?bytes?to?read:
????????????long?dataToRead;
????????????//?Identify?the?file?to?download?including?its?path.
????????????string?filepath??=?@"E:/software/SQL?Server?2000?Personal?Edition.ISO";
????????????//?Identify?the?file?name.
????????????string??filename??=?System.IO.Path.GetFileName(filepath);
????????????try
????????????{
????????????????//?Open?the?file.
????????????????iStream?=?new?System.IO.FileStream(filepath,?System.IO.FileMode.Open,?
????????????????????System.IO.FileAccess.Read,System.IO.FileShare.Read);
??????????????? Response.Clear();
????????????????//?Total?bytes?to?read:
????????????????dataToRead?=?iStream.Length;
????????????????long?p?=?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;
????????????????//?Read?the?bytes.
????????????????while?(dataToRead?>?0)
????????????????{
????????????????????//?Verify?that?the?client?is?connected.
????????????????????if?(Response.IsClientConnected)?
????????????????????{
????????????????????????//?Read?the?data?in?buffer.
????????????????????????length?=?iStream.Read(buffer,?0,?10240);
????????????????????????//?Write?the?data?to?the?current?output?stream.
????????????????????????Response.OutputStream.Write(buffer,?0,?length);
????????????????????????//?Flush?the?data?to?the?HTML?output.
????????????????????????Response.Flush();
????????????????????????buffer=?new?Byte[10240];
????????????????????????dataToRead?=?dataToRead?-?length;
????????????????????}
????????????????????else
????????????????????{
????????????????????????//prevent?infinite?loop?if?user?disconnects
????????????????????????dataToRead?=?-1;
????????????????????}
????????????????}
????????????}
????????????catch?(Exception?ex)?
????????????{
????????????????//?Trap?the?error,?if?any.
????????????????Response.Write("Error?:?"?+?ex.Message);
????????????}
????????????finally
????????????{
????????????????if?(iStream?!=?null)?
????????????????{
????????????????????//Close?the?file.
????????????????????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
總結
以上是生活随笔為你收集整理的Asp.net(c#)实现多线程断点续传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET 制作让搜索引擎可以友好访
- 下一篇: 网页播放的视频代码