



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、HTTP斷點續(xù)傳原理及Flex實現(xiàn)技術(shù) 研發(fā)中心 王秀珍一、Http斷點續(xù)傳原理現(xiàn)在基本上任何一個下載工具都是支持斷點續(xù)傳的,拋開P2P的成分不談,我們單說通過HTTP服務(wù)器是如何實現(xiàn)斷點續(xù)傳的。關(guān)鍵在于你向HTTP服務(wù)器發(fā)起文件請求的時候,是否明確的告知,要下載文件的哪個區(qū)域,我們都知道HTTP請求是有一個Header的,實際上里面有個屬性是定義下載的區(qū)域的,這個屬性就是Range,它接收的值是一個區(qū)間范圍,比如:Range:bytes=0-10000這樣我們就可以按照一定的規(guī)則,將一個大文件拆分為若干很小的部分,然后分批次的下載,每個小塊下載完成之后,都合并到文件中,這樣即時中間中斷了下載
2、,我們重新開始下載的時候,也可以通過文件的字節(jié)長度來判斷下載的起始點,然后重啟斷點續(xù)傳的過程,直到最后完成下載過程。1、 下面是非斷點續(xù)傳的Http剖析假設(shè)我們通過瀏覽器去下載一個名稱為hello.zip的文件。那么瀏覽器發(fā)出的請求信息如下:GET /hello.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpointAccept-Language: zh-
3、cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)Connection: Keep-Alive服務(wù)器收到請求后,按要求尋找請求的文件,提取文件的信息,然后返回給瀏覽器,返回信息如下:200Content-Length=106786028Accept-Ranges=bytesDate=Mon, 30 Apr 2009 12:56:11 GMTETag=W/"02ca57e173c12:95b"Content-Type=applicatio
4、n/octet-streamLast-Modified=Mon, 30 Apr 2009 12:56:11 GMT2、下面是斷點續(xù)傳的http剖析如果自己編的一個客戶端程序來傳遞請求信息給Web服務(wù)器,要求從1000070字節(jié)開始。GET /hello.zip HTTP/1.0推薦精選User-Agent: NetFoxRANGE: bytes=1000070-Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2仔細看一下就會發(fā)現(xiàn)多了一行RANGE: bytes=1000070-,這一行的意思就是告訴服務(wù)器hello.zip這
5、個文件從1000070字節(jié)開始傳,前面的字節(jié)不用傳了。服務(wù)器收到這個請求以后,返回的信息如下:206Content-Length=106786028Content-Range=bytes 1000070-106786027/106786028Date=Mon, 30 Apr 2009 12:55:20 GMTETag=W/"02ca57e173c12:95b"Content-Type=application/octet-streamLast-Modified=Mon, 30 Apr 2009 12:55:20 GMT和前面服務(wù)器返回的信息比較一下,就會發(fā)現(xiàn)增加了Conten
6、t-Range一行,且返回的代碼也改為206了,而不再是200了。以上就是HTTP斷點續(xù)傳的原理,具體通過什么技術(shù)實現(xiàn),比如Java、C+、Flex等,都可以實現(xiàn)。二、Flex實現(xiàn)的文件下載斷點續(xù)傳下面是基于AS3+Flash Player+AIR,制作一個斷點續(xù)傳的小程序,大概實現(xiàn)思路如下:1、首先對文件發(fā)起請求,得到文件的尺寸(字節(jié)長度),但并不下載2、然后將文件劃分為若干區(qū)域,對第一個區(qū)域的內(nèi)容發(fā)起請求(通過指定HTTP頭的Range)3、第一個區(qū)域的內(nèi)容很快下載完成,使用File保存到本地文件4、移動指針,對第二個區(qū)域的內(nèi)容發(fā)起請求,下載完畢后與文件合并5、以此類推,直到下載完成整個文
7、件以下是實現(xiàn)代碼:<?xml version="1.0" encoding="utf-8"?><mx:WindowedApplication xmlns:mx=" layout="absolute" title="夢想下載" > <mx:Script> <!CDATA import .URLLoader; import .URLStream; import .URLRequest; import flash.utils.ByteArray; import mx.c
8、ontrols.Alert; private var contentLength:int = 0; private var file:File;推薦精選 private var startPoint:int = 0; private var endPoint:int = 0; private var rangeStream:URLStream; private var isInit:Boolean = false; private var range:int = 1024000; /每次下載的字節(jié)數(shù), private var currentData:ByteArray; private var
9、 progress:Number = 0; private function init():void var dotSplitLength:uint = videoURL.text.split("/").length;/這兩行代碼是為了獲取下載文件的名稱 var fileName:String = videoURL.text.split("/")dotSplitLength-1; file = new File("C:/DownLoadTemp/"+fileName);/創(chuàng)建一個和下載文件名稱一致的文件,保存在D盤temp目錄下 is
10、Init = true; private function doDownload():void /先發(fā)送一個下載請求,可以得到文件的真實尺寸 var getContentLengthRequest:URLRequest = new URLRequest(videoURL.text); var getContentLengthLoader:URLLoader = new URLLoader(); getContentLengthLoader.addEventListener(ProgressEvent.PROGRESS ,function(e:ProgressEvent):void conten
11、tLength = getContentLengthLoader.bytesTotal;/得到文件的真實尺寸 getContentLengthLoader.close();/停止下載 downloadByRange();/按照斷點續(xù)傳的方式下載 ); getContentLengthLoader.load(getContentLengthRequest); private function downloadByRange():void /按照斷點續(xù)傳的方式下載 if(!isInit) init(); var fileStr:FileStream = new FileStream(); if(f
12、ile.exists) /如果文件是存在的,就說明下載過,需要計算從哪個點開始下載 fileStr.open(file, FileMode.READ); startPoint = fileStr.bytesAvailable;/計算從哪個點開始下載 fileStr.close();/關(guān)閉文件流 endPoint = startPoint+range>contentLength?contentLength:startPoint+range; if(startPoint=contentLength) 推薦精選 Alert.show("您已經(jīng)完成了下載"); return;
13、 var rangeRequest:URLRequest = new URLRequest(videoURL.text); var header:URLRequestHeader = new URLRequestHeader("Range", "bytes="+startPoint+"-"+endPoint);/注意這里很關(guān)鍵,我們在請求的Header里包含對Range的描述,這樣服務(wù)器會返回文件的某個部分 rangeRequest.requestHeaders.push(header);/將頭信息添加到請求里 rangeStream
14、 = new URLStream(); rangeStream.addEventListener(Event.COMPLETE ,function(e:Event):void var bytesLength:int = rangeStream.bytesAvailable; currentData = new ByteArray(); rangeStream.readBytes(currentData, 0, bytesLength); /得到下載的數(shù)據(jù) fileStr = new FileStream(); fileStr.open(file, FileMode.UPDATE); fileS
15、tr.position = fileStr.bytesAvailable;/將指針指向文件尾 fileStr.writeBytes(currentData, 0, currentData.length);/在文件中寫入新下載的數(shù)據(jù) fileStr.close();/關(guān)閉文件流 progress = endPoint/contentLength * 100;/計算下載進程 bar.setProgress(progress,100); bar.label= "Progress" + " " + progress + "%" if(endP
16、oint < contentLength) downloadByRange();/如果下載沒有完成,則執(zhí)行下一個斷點下載,直到下載完畢整個文件 ); rangeStream.load(rangeRequest);/發(fā)起請求 private function pause():void /暫停下載 if(rangeStream!=null&&rangeStream.connected) rangeStream.close(); > </mx:Script> <mx:Canvas width="494" height="28
17、4" horizontalCenter="0" verticalCenter="0"> <mx:Label x="21" y="87" text="下載地址" width="53" fontSize="12" /> <mx:TextInput x="82" y="87" width="399" id="videoURL" text="
18、31:8080/FlexChatServer/AContreCourant.avi"/> <mx:Button x="160" y="141" label="下載" id="btDownload" fontSize="12" click="doDownload();btDownload.enabled=false;btPause.enabled=true;btContinue.enabled=false"/>推薦精選 <mx:Button x="221" y="141" label="暫停" id="btPause" fontSize="12" enabled="false" click="pause();btPause.enabled=false;btContinue.enabled=true"/> <mx:Button x="281" y=&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030定制家居市場銷售渠道及投資規(guī)劃建議分析研究報告
- 2025-2030女靴產(chǎn)業(yè)規(guī)劃專項研究報告
- 2025-2030天然椰子油行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030塑料管材行業(yè)行業(yè)風(fēng)險投資發(fā)展分析及投資融資策略研究報告
- 2025-2030基于物聯(lián)網(wǎng)的智能溫室行業(yè)市場現(xiàn)狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 網(wǎng)絡(luò)促銷活動的類型與設(shè)計試題及答案
- 2025-2030國內(nèi)氣象儀器行業(yè)市場發(fā)展分析及發(fā)展前景與投資機會研究報告
- 2025-2030商業(yè)印刷加工行業(yè)市場深度分析及發(fā)展規(guī)劃與投資前景研究報告
- 2025-2030口腔診所產(chǎn)業(yè)營銷領(lǐng)域調(diào)研及經(jīng)營前景可行性規(guī)劃報告
- 2025-2030半干紅葡萄酒行業(yè)市場供需格局及發(fā)展趨勢與投資前景研究報告
- 年度IT投資預(yù)算表格
- 浙江嘉華晶體纖維有限公司年產(chǎn)300噸超高溫陶瓷纖維棉及600噸高溫陶瓷纖維棉制品環(huán)境影響報告表
- 學(xué)習(xí)質(zhì)量評價:SOLO分類理論
- 2023年上海學(xué)業(yè)水平考試生命科學(xué)試卷含答案
- 胰膽線陣超聲內(nèi)鏡影像病理圖譜
- 中醫(yī)內(nèi)科學(xué)總論-課件
- 免疫學(xué)防治(免疫學(xué)檢驗課件)
- 消防水泵房操作規(guī)程
- 腹腔雙套管沖洗操作
- 《微型消防站建設(shè)標準》
- 中國少年先鋒隊入隊申請書 帶拼音
評論
0/150
提交評論