一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.net中斷點續傳的原理與實現方法分享

Asp.net中斷點續傳的原理與實現方法分享

2019-10-06 11:21asp.net技術網 ASP.NET教程

在了解HTTP斷點續傳的原理之前,讓我們先來了解一下HTTP協議,HTTP協議是一種基于tcp的簡單協議,分為請求和回復兩種

請求協議是由客戶機 (瀏覽器)向服務器(WEB SERVER)提交請求時發送報文的協議。回復協議是由服務器(web server),向客戶機(瀏覽器)回復報文時的協議。請求和回復協議都由頭和體組成。頭和體之間以一行空行為分隔。 
以下是一個請求報文與相應的回復報文的例子: 

復制代碼代碼如下:


GET /image/index_r4_c1.jpg HTTP/1.1 
Accept: */* 
Referer: http://192.168.3.120:8080 
Accept-Language: zh-cn 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705) 
Host: 192.168.3.120:8080 
Connection: Keep-Alive 

HTTP/1.1 200 OK 
Server: Microsoft-IIS/5.0 
Date: Tue, 24 Jun 2003 05:39:40 GMT 
Content-Type: image/jpeg 
Accept-Ranges: bytes 
Last-Modified: Thu, 23 May 2002 03:05:40 GMT 
ETag: "bec48eb862c21:934" 
Content-Length: 2827 
…. 


  顧名思義,斷點續傳就是在上一次下載時斷開的位置開始繼續下載。在HTTP協議中,可以在請求報文頭中加入Range段,來表示客戶機希望從何處繼續下載。 
  比如說從第1024字節開始下載,請求報文如下: 

復制代碼代碼如下:



GET /image/index_r4_c1.jpg HTTP/1.1 
Accept: */* 
Referer: http://192.168.3.120:8080 
Accept-Language: zh-cn 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705) 
Host: 192.168.3.120:8080 
Range:bytes=1024- 
Connection: Keep-Alive 


相應的響應報文為 

復制代碼代碼如下:


HTTP/1.1 206 Partial Content 
Server: Microsoft-IIS/5.0 
Date: Tue, 24 Jun 2003 05:39:40 GMT 
Content-Type: image/jpeg 
Accept-Ranges: bytes 
Last-Modified: Thu, 23 May 2002 03:05:40 GMT 
ETag: "bec48eb862c21:934" 
Content-Length: 1803 
Content-Range: bytes 1024-1803/2827 


通過兩段不同的報文可以看到,在斷點續傳時,我們只要能給客戶端相應相應的報文,使客戶端能正確響應,并且傳送續傳點后的部分文件即可實現斷點續傳。 
1. 區分斷點續傳報文。 
由于斷點續傳報文中含有Range字段,因此,只要通過Request.Headers["Range"]是否為null即可。 
2. 發送正確的續傳響應報文 
兩次響應報文不同的部分在報文中已經用紅色部分標識出來,只需修改紅色部分報文頭,便能發送正確的續傳報文。 
3. 傳送正確的文件部分 
續傳的時候只需要傳送續傳點之后的文件即可,首先通過請求報文中的Range字段獲取文件的開始位置,傳送文件的時候只需要傳送該位置之后的部分即可。 
下面的代碼示例顯示了一個可以支持斷點續傳的 ASP.NET 頁 

復制代碼代碼如下:


private void Page_Load(object sender, System.EventArgs e) 

string file = MapPath("ff.zip"); 
FileInfo fi=new FileInfo (file); 

long startPos = 0; 

//所傳輸的文件長度 
long fileTranLen = fi.Length; 

//斷點續傳請求 
if (Request.Headers["Range"] != null) 

Response.StatusCode = 206; 
startPos = long.Parse(Request.Headers["Range"].Replace("bytes=", "").Split('-')[0]); 
fileTranLen -= startPos; 

//Response.AddHeader("Accept-Ranges", "bytes"); 
//Content-Range: bytes [文件塊的開始字節]-[傳輸文件的總大小]/[文件的總大小] 
Response.AddHeader("Content-Range", string.Format("bytes {0}-{1}/{2}",startPos,fileTranLen,fi.Length)); 


Response.AddHeader("Content-Length", fileTranLen.ToString()); 

//基本的文件下載報文頭 
Response.ContentType = "application/octet-stream"; 
Response.AddHeader("Content-Disposition", "attachment; filename=" + fi.Name); 

//簡單的流拷貝 
System.IO.Stream fileStream = System.IO.File.OpenRead(file); 
fileStream.Position = startPos; 

byte[] buffer = new Byte[1024]; 
int count; 
while ((count = fileStream.Read(buffer, 0, buffer.Length)) > 0) 

Response.OutputStream.Write(buffer, 0, count); 

fileStream.Close(); 

Response.End(); 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91tv在线| 96日本xxxxxxxxx70 95在线观看精品视频 | 亚洲毛片基地4455ww | 国产欧美日韩一区二区三区在线 | narutotsunade全彩雏田 | www日本高清视频 | 欧美一级艳片视频免费观看 | 国产99视频精品免视看7 | 妇伦小说 | 91精品综合国产在线观看 | 超91在线 | 亲爱的客栈第二季免费观看完整版 | 国产精品九九久久一区hh | 美女把小内内脱个精光打屁屁 | 日本生活中的玛丽 | 欧美又黄又激烈真实床戏 | 亚洲视频一区网站 | 秀婷程仪公欲息肉婷在线观看 | 猛h辣h高h文湿校园1v1 | 蜜桃影像传媒推广 | 国产高清自拍视频 | 美女69xx | 荡女淫春2未删减版 | 羞羞麻豆国产精品1区2区3区 | 日本大学生xxxxx69泡妞 | 国内精品久久久久久久久 | 99re5精品视频在线观看 | 国产精品乱码高清在线观看 | 91麻豆国产精品91久久久 | 国产一区二区在线观看美女 | 荡女淫春2古装 | 大好硬好深好爽想要视频 | 免费国产高清精品一区在线 | 日本精工厂网址 | 精品人人做人人爽久久久 | 98在线视频噜噜噜国产 | 久久91精品国产91久 | 希岛爱理aⅴ在线中文字幕 午夜综合网 | 西野翔全部作品在线观看 | 91手机在线 | 高h辣文小说网 烧书阁 |