大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java實(shí)現(xiàn)斷點(diǎn)上傳視頻文件

Java實(shí)現(xiàn)斷點(diǎn)上傳視頻文件

更新時(shí)間:2020-11-25 16:03:35 來源:動力節(jié)點(diǎn) 瀏覽2599次

所謂斷點(diǎn)續(xù)傳,其實(shí)只是指下載,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。在以前版本的HTTP協(xié)議是不支持?jǐn)帱c(diǎn)的,HTTP/1.1開始就支持了。一般斷點(diǎn)下載時(shí)才用到Range和Content-Range實(shí)體頭。HTTP協(xié)議本身不支持?jǐn)帱c(diǎn)上傳,需要自己實(shí)現(xiàn)。

java實(shí)現(xiàn)上傳視頻文件

Range

用于請求頭中,指定第一個(gè)字節(jié)的位置和最后一個(gè)字節(jié)的位置,一般格式:

Range:用于客戶端到服務(wù)端的請求,可以通過改字段指定下載文件的某一段大小及其單位,字節(jié)偏移從0開始。典型格式:

Ranges:(unit=first byte pos)-[last byte pos]

Ranges:bytes=4000-下載從第4000字節(jié)開始到文件結(jié)束部分

Ranges:bytes=0~N下載第0-N字節(jié)范圍的內(nèi)容

Ranges:bytes=M-N下載第M-N字節(jié)范圍的內(nèi)容

Ranges:bytes=-N下載最后N字節(jié)內(nèi)容

1.以下幾點(diǎn)需要注意:

(1)這個(gè)數(shù)據(jù)區(qū)間是個(gè)閉合區(qū)間,起始值是0,所以“Range:bytes=0-1”這樣一個(gè)請求實(shí)際上是在請求開頭的2個(gè)字節(jié)。

(2)“Range:bytes=-200”,它不是表示請求文件開始位置的201個(gè)字節(jié),而是表示要請求文件結(jié)尾處的200個(gè)字節(jié)。

(3)如果last byte pos小于first byte pos,那么這個(gè)Range請求就是無效請求,server需要忽略這個(gè)Range請求,然后回應(yīng)一個(gè)200,把整個(gè)文件發(fā)給client。

(4)如果last byte pos大于等于文件長度,那么這個(gè)Range請求被認(rèn)為是不能滿足的,server需要回應(yīng)一個(gè)416,Requested range not satisfiable。

2.示例解釋:

表示頭500個(gè)字節(jié):bytes=0-499

表示第二個(gè)500字節(jié):bytes=500-999

表示最后500個(gè)字節(jié):bytes=-500

表示500字節(jié)以后的范圍:bytes=500-

第一個(gè)和最后一個(gè)字節(jié):bytes=0-0,-1

同時(shí)指定幾個(gè)范圍:bytes=500-600,601-999

Content-Range

用于響應(yīng)頭,指定整個(gè)實(shí)體中的一部分的插入位置,他也指示了整個(gè)實(shí)體的長度。在服務(wù)器向客戶返回一個(gè)部分響應(yīng),它必須描述響應(yīng)覆蓋的范圍和整個(gè)實(shí)體長度。一般格式:

Content-Range:bytes(unit first byte pos)-[last byte pos]/[entity legth]

Header示例

請求下載整個(gè)文件:

GET/test.rar HTTP/1.1

Connection:close

Host:116.1.219.219

Range:bytes=0-801//一般請求下載整個(gè)文件是bytes=0-或不用這個(gè)頭

一般正常回應(yīng)

HTTP/1.1 200 OK

Content-Length:801

Content-Type:application/octet-stream

Content-Range:bytes 0-800/801//801:文件總大小

一個(gè)最簡單的斷點(diǎn)續(xù)傳實(shí)現(xiàn)大概如下:

1.客戶端下載一個(gè)1024K的文件,已經(jīng)下載了其中512K

2.網(wǎng)絡(luò)中斷,客戶端請求續(xù)傳,因此需要在HTTP頭中申明本次需要續(xù)傳的片段:

Range:bytes=512000-

這個(gè)頭通知服務(wù)端從文件的512K位置開始傳輸文件

3.服務(wù)端收到斷點(diǎn)續(xù)傳請求,從文件的512K位置開始傳輸,并且在HTTP頭中增加:

Content-Range:bytes 512000-/1024000

并且此時(shí)服務(wù)端返回的HTTP狀態(tài)碼應(yīng)該是206,而不是200。

但是在實(shí)際場景中,會出現(xiàn)一種情況,即在終端發(fā)起續(xù)傳請求時(shí),URL對應(yīng)的文件內(nèi)容在服務(wù)端已經(jīng)發(fā)生變化,此時(shí)續(xù)傳的數(shù)據(jù)肯定是錯(cuò)誤的。如何解決這個(gè)問題了?顯然此時(shí)我們需要有一個(gè)標(biāo)識文件唯一性的方法。在RFC2616中也有相應(yīng)的定義,比如實(shí)現(xiàn)Last-Modified來標(biāo)識文件的最后修改時(shí)間,這樣即可判斷出續(xù)傳文件時(shí)是否已經(jīng)發(fā)生過改動。同時(shí)RFC2616中還定義有一個(gè)ETag的頭,可以使用ETag頭來放置文件的唯一標(biāo)識,比如文件的MD5值。

終端在發(fā)起續(xù)傳請求時(shí)應(yīng)該在HTTP頭中申明If-Match或者If-Modified-Since字段,幫助服務(wù)端判別文件變化。

另外RFC2616中同時(shí)定義有一個(gè)If-Range頭,終端如果在續(xù)傳是使用If-Range。If-Range中的內(nèi)容可以為最初收到的ETag頭或者是Last-Modfied中的最后修改時(shí)候。服務(wù)端在收到續(xù)傳請求時(shí),通過If-Range中的內(nèi)容進(jìn)行校驗(yàn),校驗(yàn)一致時(shí)返回206的續(xù)傳回應(yīng),不一致時(shí)服務(wù)端則返回200回應(yīng),回應(yīng)的內(nèi)容為新的文件的全部數(shù)據(jù)。

java實(shí)現(xiàn)上傳視頻文件

以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java實(shí)現(xiàn)斷點(diǎn)上傳視頻文件”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日日夜夜操天天干 | 亚洲精品乱码国产精品乱码 | 在线国产视频一区 | 全黄一级裸片视频免费 | 亚洲国产一区二区三区a毛片 | 欧美xxx午夜免费视频 | 成人精品视频网站 | 欧美综合中文字幕久久 | 国产精品九九九久久九九 | 欧美精品一区在线看 | 二级毛片 | 国产品精人成福利视频 | 日本在线亚州精品视频在线 | 国产精品久久久久久久久岛 | 九九久久久 | 97精品国产高清在线看入口 | 欧美一级毛片图 | 日本久久久久亚洲中字幕 | 久久国产精品久久精 | www.狠狠插| 亚洲国产aaa毛片无费看 | 鲁丝一区二区三区不属 | 男人猛桶女人下面视频国产 | 免费国产视频在线观看 | 国产无毛 | 99re热视频精品首页 | 牛牛影院成人网 | 91久久国产视频 | 天天操夜夜操夜夜操 | 毛片网站在线 | 波多野吉衣一区二区三区在线观看 | 欧美亚洲天堂 | 欧美日韩小视频 | 精品亚洲成a人在线观看 | 九九在线免费视频 | 成人国产精品久久久免费 | 日韩国产成人精品视频人 | 日本免费高清一级毛片 | 老司机午夜免费 | 日韩毛片免费看 | 曰本lesxxxx在线观看视频 |