日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.net(c#)实现多线程断点续传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html

以前一直錯誤的認為在ASP.NET中無法通過編程方式實現多線程斷點續傳,今天終于獲得了這樣一個解決方案,讓我明白要學習的東西還很多。
此解決方案基于其它解決方案及相關資料,根據我自己的理解改進.如有錯漏,請盡管指出;如有其它更好的解決方案,請推薦一下,感謝先。

System.IO.Stream?iStream?=?null;

????????????
//?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#)实现多线程断点续传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。