激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

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

Asp.net中斷點續(xù)傳的原理與實現(xiàn)方法分享

2019-10-06 11:21asp.net技術(shù)網(wǎng) ASP.NET教程

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

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

復制代碼代碼如下:


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 
…. 


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

復制代碼代碼如下:



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 


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

復制代碼代碼如下:


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

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

long startPos = 0; 

//所傳輸?shù)奈募L度 
long fileTranLen = fi.Length; 

//斷點續(xù)傳請求 
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 [文件塊的開始字節(jié)]-[傳輸文件的總大小]/[文件的總大小] 
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(); 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 97超碰资源站 | 亚洲国产精品二区 | 羞羞视频.www在线观看 | 国产三级国产精品国产普男人 | 国产九色91 | 福利一区二区三区视频在线观看 | 爽爽淫人综合网网站 | 最新黄色电影网站 | h视频免费在线 | 在线观看中文字幕av | 欧美国产精品久久 | 成人免费毛片一 | 欧美亚洲国产日韩 | 国产免费黄色 | 黄色网络免费看 | 久久人人97超碰国产公开结果 | av老司机久久 | 国产chinesehd精品91 | 少妇av片| 亚洲国产精品久久久久制服红楼梦 | 国产视频导航 | 美女视频网站黄色 | 久久精精 | 91在线视频免费观看 | 久久久久久久久久久久久久久伊免 | 精品视频一区二区三区四区 | 99久久久精品免费观看国产 | 精品亚洲va在线va天堂资源站 | 二区三区四区视频 | 精品国产91久久久久久浪潮蜜月 | 国产 视频 一区二区 | 国产免费片 | 免费黄色在线观看网站 | 在线a免费观看 | 中国免费一级毛片 | 国产小视频在线 | h色在线观看 | 极品大长腿啪啪高潮露脸 | 欧美一级高清片_欧美高清aa | 欧美a∨一区二区三区久久黄 | 国产在线欧美 |