斷點上傳原理
⑴ 如何讓一個網站支持斷點續傳
其實斷點續傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已。
打個比方,瀏覽器請求伺服器上的一個文時,所發出的請求如下: 假設伺服器域名為w www.sjtu.e.cn,文件名為down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 伺服器收到請求後,按要求尋找請求的文件,提取文件的信息,然後返回給瀏覽器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。
所以在客戶端瀏覽器傳給 Web伺服器的時候要多加一條信息--從哪裡開始。
下面是用自己編的一個"瀏覽器"來傳遞請求信息給Web伺服器,要求從2000070位元組開始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔細看一下就會發現多了一行RANGE: bytes=2000070- 這一行的意思就是告訴伺服器down.zip這個文件從2000070位元組開始傳,前面的位元組不用傳了。
伺服器收到這個請求以後,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面伺服器返回的信息比較一下,就會發現增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代碼也改為206了,而不再是200了。
知道了以上原理,就可以進行斷點續傳的編程了。
⑵ 如何讓伺服器支持斷點續傳
其實斷點續傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已。
打個比方,瀏覽器請求伺服器上的一個文時,所發出的請求如下: 假設伺服器域名為w ,文件名為down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 伺服器收到請求後,按要求尋找請求的文件,提取文件的信息,然後返回給瀏覽器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。
所以在客戶端瀏覽器傳給 Web伺服器的時候要多加一條信息--從哪裡開始。
下面是用自己編的一個"瀏覽器"來傳遞請求信息給Web伺服器,要求從2000070位元組開始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔細看一下就會發現多了一行RANGE: bytes=2000070- 這一行的意思就是告訴伺服器down.zip這個文件從2000070位元組開始傳,前面的位元組不用傳了。
伺服器收到這個請求以後,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面伺服器返回的信息比較一下,就會發現增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代碼也改為206了,而不再是200了。
知道了以上原理,就可以進行斷點續傳的編程了。
⑶ ftp 命令可以斷點續傳嗎
二、上傳: 1、獲取伺服器上和本地要上傳文件的同名文件大小; 2、向伺服器發送「APPE + 文件名」,通知伺服器,接下來從數據通道發送給你的數據要附加到這個文件末尾。 3、定位本地文件指針(和FTP上文件大小相同的位置) 4、從文件指針處讀數據並發送。 好 了,FTP斷點續傳的原理就這么簡單。代碼里將斷點上傳和斷點下載放到同一個函數(MoveFile)里,通過get參數說明是上傳還是下載。當然,整個 FTP類的實現有800多行,包括登錄、退出、獲取FTP文件大小、刪除FTP伺服器上文件、響應伺服器,解析響應信息等函數。相應的注釋代碼里都有,這 里就不一一熬述了。
這里重點說說PASV模式,即被動模式,這是FTP命令里比較不容易理解的一個,這條命令請求伺服器在某個埠(非FTP默認埠或控制命令埠)創建一個監聽socket,伺服器創建的埠號會在客戶端的控制命令通道上得到響應。得到這個埠號後,客戶端就可以創建新的 socket(數據通道)
connect過去,並進行文件傳輸等工作。否則,如果為非被動模式,那麼監聽的socket由客戶端創建,伺服器connect過來。 對於這條命令的存在我是這么理解的,存在這么一種情況:客戶端的IP是個內網的IP,伺服器的IP是個外網的,當進行數據傳輸時內網的IP對於伺服器是不可見的,只有由伺服器啟動監聽socket才能建立數據通道,所以必須以被動模式進行。:)
⑷ 下載軟體的斷電續傳是什麼原理
斷點續傳的原理 其實斷點續傳的原理很簡單其實斷點續傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已。
打個比方,瀏覽器請求伺服器上的一個文時,所發出的請求如下:
假設伺服器域名為wwww.sjtu.e.cn,文件名為down.zip。
GET /down.zip HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Connection: Keep-Alive
伺服器收到請求後,按要求尋找請求的文件,提取文件的信息,然後返回給瀏覽器,返回信息如下:
200
Content-Length=106786028
Accept-Ranges=bytes
Date=Mon, 30 Apr 2001 12:56:11 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。所以在客戶端瀏覽器傳給
Web伺服器的時候要多加一條信息--從哪裡開始。
下面是用自己編的一個"瀏覽器"來傳遞請求信息給Web伺服器,要求從2000070位元組開始。
GET /down.zip HTTP/1.0
User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
仔細看一下就會發現多了一行RANGE: bytes=2000070-
這一行的意思就是告訴伺服器down.zip這個文件從2000070位元組開始傳,前面的位元組不用傳了。
伺服器收到這個請求以後,返回的信息如下:
206
Content-Length=106786028
Content-Range=bytes 2000070-106786027/106786028
Date=Mon, 30 Apr 2001 12:55:20 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT
和前面伺服器返回的信息比較一下,就會發現增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代碼也改為206了,而不再是200了。
⑸ 關於FTP斷點續傳原理 解釋
由於FTP是順序接收文件的,所以,只要計算已接收的數據大小,就可以知道斷點在文件的偏移量,續傳時,客戶端將已接收的數據量傳遞給伺服器,伺服器使用這個做為偏移量繼續讀取文件,將剩餘的數據發送至客戶端,客戶端僅需將接收到的數據追加至原文件尾部即可.
這樣的一個過程即可實現斷點續傳.
另外有一些客戶端為了閉免錯誤(因為掉線經常是由於錯誤引起的),會少發送實際接收的數據量,比如原1M的文件,已接收512KB,客戶端可能會返回給伺服器500KB,這樣伺服器就會從500KB處開始返回數據,客戶端則從500KB處開始覆蓋已有的12KB,以避免由於錯誤斷開時造成的數據錯誤.好像說多了.
⑹ 如何實現基於http協議的斷點續傳的上傳功能
於HTTP 協議的多線程下載和斷點續傳的實現 學 生:葉升路 指導教師:覃 穎 (三峽大學 電氣信息學院) 摘 要:本文介紹了網路下載軟體中的最新技術——多線程下載和斷點續傳技術,同時 也介紹了HTTP 協議的發展、特點以及WinSock 編程技術。最後在這些技術的基礎上成 功設計並實現了基於HTTP 協議的具有多線程下載和斷點續傳功能的下載軟體。本軟體 的實現代碼未使用任何WinInet API 函數如InternetOpen , InternetConnect 等,而是直接 使用WinSock 編程,逐步解析HTTP 協議來完成會話和文件下載等功能。經測試,下載 速度有所提高。 關鍵詞:下載;多線程;斷點續傳;HTTP;WinSock; Abstract:This paper introces the latest downloading technology called multi-threaded downloading and resume in network downloading software. But also descripes the development of HTTP protocol, characteristics and WinSock programming. Finally, based on these technologies successfully designed and implemented a downloading tool based on the HTTP protocol with multi-threaded and resume features. The realization of the software code does not use any WinInet API functions such as InternetOpen, InternetConnect, etc., but directly use WinSock to programming, and complete the functions of conversation and file downloads and others by parse HTTP protocol steply. After tested, the speed of downloading has increased. Keywords: Downloading;Multi-thread;Resume;HTTP;WinSock; 前言 最近幾年,隨著計算機網路的飛速發展,網際網路(Internet)已經逐漸成為人們生活、 工作、學習必不可缺的一部分。網際網路上存儲了大量豐富的信息資源,我們可以使用下載 工具,把需要的信息資源下載到本地。但是由於受到各種因素的限制,例如伺服器性能、 網路帶寬、下載的信息量以及下載工具等等,下載速度受到不同程度的影響。因此人們不 斷地提高伺服器性能,擴展網路帶寬,開發效率更高的下載工具以達到最大化提高下載 速度的目的。 在限制下載速度的眾多因素中,研究新的網路下載技術開發出更高效的下載工具無 疑是其中最節約,環保以及方便的方式。網路下載技術,也可以稱為網路文件共享技術, 10 1 它一直是網路發展的重要推動力之一。早期人們共享資源的普遍方法是將資源文件上傳 至伺服器上,然後其他用戶可以通過HTTP 或FTP 等協議將其下載到本地電腦。這種模 式稱為客戶機/伺服器模式即C/S 模式,它對伺服器的依賴性很大,當下載用戶很少時, 比如說一個,他將獨享伺服器的帶寬,很顯然其下載速度會非常快。然而當下載的人數 較多而伺服器帶寬有限時,比如伺服器帶寬為3MB/S,而下載人數為100 人,則眾多下 載用戶不得不共享一個帶寬(3MB/S)最終結果是下載速度均分(30KB/S),普遍不高。 P2P 技術的出現使得人們終於擺脫了伺服器的枷鎖。它的主要特點是資源分散、負 載均衡、和非中心化,它將共享的文件存儲在各個客戶機節點上,用戶之間可以直接共 享和傳輸文件而不需要通過伺服器。客戶機不再只利用伺服器帶寬進行下載,它同時也 可以利用其他客戶機節點的帶寬,這樣大大提高了下載速度。 縱觀網路下載技術發展的歷史,可以將其劃分為四個階段:單線程下載階段、多線 程下載及斷點續傳階段、P2P階段、P2SP階段。 一、單線下載時代:應對有限時間流量的辦法 早在上個世紀90年代,當時互聯網並不普及,很多人使用Modem撥號,通過Telnet 軟體連接到撥接式BBS上獲取資訊並與別人交流(收發郵件等),由於伺服器的電話線 路數量有限,因此都會限制連接時間,一般新注冊用戶只有10分鍾左右。這點時間用來 看帖回帖顯然不夠的,因此有人就開發了軟體,進入BBS後,能夠將整個BBS上所有內 容都下載回來,然後可以斷線慢慢看慢慢回,最後再次撥入BBS上傳回復。 二、斷點續傳與多線程下載時代:大幅度提高速度 進入Windows與WWW(World Wide Web,互聯網)時代之後,IE,Netscape等瀏覽 器都可以通過點擊左鍵下載,那個時候網路速度最快不過5KB/s,下載一首5MB的MP3 歌曲要15分鍾以上!中途萬一斷線就前功盡棄,於是有人開發了支持斷點續傳的下載軟 件。 世界上第一款支持斷點續傳的下載軟體應該是GetRight。它可讓你用瀏覽器下載文 件時有續傳功能,可設定時間來下載文件或是中斷Modem撥接,下載完畢時自動中斷 Modem撥接或關機。 為了更好的利用帶寬,在斷點續傳的基礎上,多線程下載軟體逐漸發展了起來。最 早出現的多線程下載軟體是中國人開發的NetAnts(網路螞蟻)。網路螞蟻其實也是一 個斷點續傳軟體,但它對斷點續傳功能進行了擴展:可進行多點續傳,即利用斷點續傳 的原理同時建立多個連接下載同一個軟體並最終將其合並為一個完整的軟體。
⑺ 上傳和下載文件的原理
《文件上傳原理:Web上傳文件的原理及實現》
下載了慢慢看吧:
www.crazycoder.cn/mypdf/1487.pdf
下載:掌握ftp傳輸協議就可以了。
HTTP:
GET ***
Content range: xxx-xxx
...
check for return code 200, 220, 3xx, 4xx, 5xx
FTP:
USER
PASS
SIZE
PORT
REST
RETR
QUIT
check for return codes of each command
多開幾條連接,必要時還可以適當提高下載線程的優先順序。斷點續傳對於HTTP一般是用Range欄位實現、FTP一般用REST命令——當然,你的程序自身必須維護一個「已接收位元組」之類的數據,用已提交這些請求。
去找些HTTP、FTP協議的資料,都有詳細的講解。
==========================================================
軟體原理 。主要是用軟體上傳和下載的原理是怎樣的?
這個很難用1,2句話說清楚,因為有IE下載,web下載,BT下載原理各不相同
你還是去看看相關的書吧
⑻ 如何實現斷點續傳
其實斷點續傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已。 打個比方,瀏覽器請求伺服器上的一個文時,所發出的請求如下: 假設伺服器域名為w www.sjtu.e.cn,文件名為down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 伺服器收到請求後,按要求尋找請求的文件,提取文件的信息,然後返回給瀏覽器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT 所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。所以在客戶端瀏覽器傳給 Web伺服器的時候要多加一條信息--從哪裡開始。 下面是用自己編的一個"瀏覽器"來傳遞請求信息給Web伺服器,要求從2000070位元組開始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔細看一下就會發現多了一行RANGE: bytes=2000070- 這一行的意思就是告訴伺服器down.zip這個文件從2000070位元組開始傳,前面的位元組不用傳了。 伺服器收到這個請求以後,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面伺服器返回的信息比較一下,就會發現增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代碼也改為206了,而不再是200了。 知道了以上原理,就可以進行斷點續傳的編程了。
⑼ 如何實現HTML5文件斷點續傳
實現HTML5文件斷點續傳
一、實現文件多選
HTML5的<input>新增了"multiple"屬性,該屬性可接受多個值的文件上傳欄位
<input type="file" multiple="multiple" name="file" id="file">
添加了該屬性用戶就可以在彈出的對話框中一次性選擇多個文件了
二、實現文件從計算機拖拽到網頁以及添加文件隊列功能
這里我們用 dragover 和 drop 兩個事件來管理文件拖拽的功能
其中 dragover 用來處理在指定的元素上移動時的事件,這里我們通過給body綁定dragover時間來處理頁面中拖動文件的事件
document.body.addEventListener('dragover', dragFile, false);
function dragFile(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = '';
}
用 drop 事件來處理滑鼠松開時候的事件,此時應該將用戶拖動過來的文件加入到上傳隊列中,以供後續的處理
document.body.addEventListener('drop', dropFile, false);
function dragFile(evt) {
evt.stopPropagation();
evt.preventDefault();
// dataTransfer.files屬性可以獲取到所有拖動選擇的文件,通過遍歷可以讀取到所有文件的信息。
// 遍歷每個文件可以獲取到文件的 name、size、type、lastModifiedDate等關鍵信息
var files = evt.dataTransfer.files;
// addfile 方法 用來添加上傳文件隊列,在input的change事件中也需要調用
// 該方法首先檢查有無文件正在上傳中,如果有就將後續加入的文件放到上傳隊列中,如果沒有文件正在上傳就直接執行上傳命令
addfile(files);
}
三、文件續傳原理
目前比較常用的斷點續傳的方法有兩種,一種是通過websocket介面進行文件上傳,另一種是通過ajax,兩種方法各有千秋,雖然websocket聽起來比較高端些~ 但是除了用了不同的協議外其他的演算法基本上都是很相似的,並且服務端要開啟ws介面,這里用相對方便的ajax來說明斷點上傳的思路。
說來說去,斷點續傳最核心的內容就是把文件「切片」然後再一片一片的傳給伺服器,但是這看似簡單的上傳過程卻有著無數的坑。
首先是文件的識別,一個文件被分成了若干份之後如何告訴伺服器你切了多少塊,以及最終伺服器應該如何把你上傳上去的文件進行合並,這都是要考慮的。
因此在文件開始上傳之前,我們和伺服器要有一個「握手」的過程,告訴伺服器文件信息,然後和伺服器約定切片的大小,當和伺服器達成共識之後就可以開始後續的文件傳輸了。
前台要把每一塊的文件傳給後台,成功之後前端和後端都要標識一下,以便後續的斷點。
當文件傳輸中斷之後用戶再次選擇文件就可以通過標識來判斷文件是否已經上傳了一部分,如果是的話,那麼我們可以接著上次的進度繼續傳文件,以達到續傳的功能。
四、文件的前端切片
有了HTML5 的 File api之後切割文件比想想的要簡單的多的多。
只要用slice 方法就可以了
var packet = file.slice(start, end);
參數start是開始切片的位置,end是切片結束的位置 單位都是位元組。通過控制start和end 就可以是實現文件的分塊
如
file.slice(0,1000);
file.slice(1000,2000);
file.slice(2000,3000);
// ......
五、文件片段的上傳
上一部我們通過slice方法把文件分成了若干塊,接下來要做的事情就是把這些碎片傳到伺服器上。
這里我們用ajax的post請求來實現
textpop-up
var xhr = new XMLHttpRequest();
var url = xxx // 文件上傳的地址 可以包括文件的參數 如文件名稱 分塊數等以便後台處理
xhr.open('POST', url, true);
xhr.onload = function (e){
// 判斷文件是否上傳成功,如果成功繼續上傳下一塊,如果失敗重試該快
}
xhr.upload.onprogress = function(e){
// 選用 如果文件分塊大小較大 可以通過該方法判斷單片文件具體的上傳進度
// e.loaded 該片文件上傳了多少
// e.totalSize 該片文件的總共大小
}
xhr.send(packet);
⑽ iOS視頻斷點續傳如何實現的呢
- (IBAction)resumeInterruptedDownload:(id)sender { NSURL *url = [NSURL URLWithString: ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; NSString *downloadPath = @"/Users/ben/Desktop/asi.png"; //當request完成時,整個文件會被移動到這里 [request setDownloadDestinationPath:downloadPath]; //這個文件已經被下載了一部分 [request setTemporaryFileDownloadPath:@"/Users/ben/Desktop/asi.png.download"]; [request :YES]; [request startSynchronous]; //整個文件將會在這里 NSString *theContent = [NSString stringWithContentsOfFile:downloadPath]; } 斷點續傳的工作原理是讀取temporaryFileDownloadPath的文件的大小,並使用Range: bytes=x HTTP頭來請求剩餘的文件內容。 ASIHTTPRequest並不檢測是否存在Accept-Ranges頭(因為額外的HEAD頭請求會消耗額外的資源),所以只有確定伺服器支持斷點續傳下載時,再使用這個特性。轉載,僅供參考。