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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net 能否多线程断点续传?

發布時間:2023/12/18 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net 能否多线程断点续传? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在博客園上一搜就可以找到很多關于“asp.net 多線程斷點續傳”這方面的文章,如

http://zzk.cnblogs.com/s?w=asp.net+%e5%a4%9a%e7%ba%bf%e7%a8%8b%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0&p=1

但是經過我測試,沒有一個是真正實用的。

在這篇文章中(http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html)我2007年就留言:(37樓),問題到現在還沒有解決。

使用如下方法測試:

1、vs2010直接啟用調試。

2、把代碼編譯到release版本,.NET 2.0、.NET 4.0 都有,分別發布到win2003+iis6、win2008+iis7中。

3、然后用下載軟件(如網絡傳送帶、網絡螞蟻、迅雷等)訪問這個提供下載的網址,下載軟件開10個任務,每個任務10線程,每個任務下載限速50K左右。

結果造成asp.net給直接掛起了!嘗試訪問任何aspx的頁面則一直處于掛起狀態,即頁面無法打開,IE9選項卡的那個狀態標志一直在轉。

一開始以為是測試系統IE9達到最大鏈接數了(但是開其他第三方網站是可以的),馬上在其他電腦訪問也不行,狀態一直掛起,甚至影響到這臺服務器上的其他網站,只要是aspx的全部死掉,靜態的又可以正常訪問(jpg、css、js等文件),服務器的cpu和內存不占多少,幾乎可忽略,下載軟件停止下載后又恢復了!實在是想不出什么好方法了。

再次附上我的代碼,和在博客園搜到文章上的差不多:

protected void Page_Load(object sender, EventArgs e)
{
string q = Request.QueryString.Get("q");

System.IO.FileInfo f = new System.IO.FileInfo(Server.MapPath("/") + q);

int speed = 5000;//5K

FileStream file = new FileStream(f.FullName, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryReader br = new BinaryReader(file);

Response.AddHeader("Accept-Ranges", "bytes");

Response.Buffer = false;
long fileLength = file.Length;
long startBytes = 0;

int buff = 10240; //每線程10K bytes

int sleep = 1000 * buff / speed;

if (Request.Headers["Range"] != null)
{
Response.StatusCode = 206;
string[] range = Request.Headers["Range"].Split(new char[] { '=', '-' });

startBytes = Convert.ToInt64(range[1]);
}

// 添加頭信息,指定文件大小,讓瀏覽器能夠顯示下載進度
Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());

if (startBytes != 0)
{
//支持多線程,文件分段處理
Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}

//保持鏈接
Response.AddHeader("Connection", "Keep-Alive");

//設置輸出流數據類型。添加頭信息,為"文件下載/另存為"對話框指定默認文件名
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(f.Name, System.Text.Encoding.UTF8));

//定義流的位置
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);

long dataSent = fileLength - startBytes;
long dataLeft = 0;

while (dataLeft < dataSent)
{
if (Response.IsClientConnected)
{
Response.BinaryWrite(br.ReadBytes(buff));
dataLeft += buff;
Response.Flush();
Thread.Sleep(sleep);
}
else
{
dataSent = -1;
}
}
Response.End();
br.Close();
file.Close();
}

?

?

轉載于:https://www.cnblogs.com/zzmsl/archive/2011/12/05/can_multi-threaded_downloading_with_aspdotnet.html

總結

以上是生活随笔為你收集整理的asp.net 能否多线程断点续传?的全部內容,希望文章能夠幫你解決所遇到的問題。

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