濮阳杆衣贸易有限公司

主頁 > 知識庫 > HTML5實現(xiàn)文件斷點續(xù)傳的方法

HTML5實現(xiàn)文件斷點續(xù)傳的方法

熱門標簽:電視購物電銷外呼系統(tǒng) 電話機器人如何 西寧智能外呼系統(tǒng)加盟 高德地圖標注賓館位置 杭州營銷電銷機器人供應商 貸款電銷人工和機器人哪個好 飛亞外呼系統(tǒng) 聯(lián)通400電話申請 百應電銷機器人產業(yè)

HTML5的FILE api,有一個slice方法,可以將BLOB對象進行分割。前端通過FileList對象獲取到相應的文件,按照指定的分割方式將大文件分段,然后一段一段地傳給后端,后端再按順序一段段將文件進行拼接。

斷點續(xù)傳原理

目前比較常用的斷點續(xù)傳的方法有兩種,一種是通過websocket接口進行文件上傳,另一種是通過ajax,兩種方法各有千秋,雖然websocket聽起來比較高端些,但是除了用了不同的協(xié)議外其他的算法基本上都是很相似的,并且服務端要開啟ws接口,這里用相對方便的ajax來說明斷點上傳的思路。

說來說去,斷點續(xù)傳最核心的內容就是把文件“切片”然后再一片一片的傳給服務器,但是這看似簡單的上傳過程卻有著無數(shù)的坑。

首先是文件的識別,一個文件被分成了若干份之后如何告訴服務器你切了多少塊,以及最終服務器應該如何把你上傳上去的文件進行合并,這都是要考慮的。

因此在文件開始上傳之前,我們和服務器要有一個“握手”的過程,告訴服務器文件信息,然后和服務器約定切片的大小,當和服務器達成共識之后就可以開始后續(xù)的文件傳輸了。

前臺要把每一塊的文件傳給后臺,成功之后前端和后端都要標識一下,以便后續(xù)的斷點。

當文件傳輸中斷之后用戶再次選擇文件就可以通過標識來判斷文件是否已經上傳了一部分,如果是的話,那么我們可以接著上次的進度繼續(xù)傳文件,以達到續(xù)傳的功能。

文件的前端切片

有了HTML5 的 File api之后切割文件比想象的要簡單的多。

只要用slice 方法就可以了

var packet = file.slice(start, end);

參數(shù)start是開始切片的位置,end是切片結束的位置 單位都是字節(jié)。通過控制start和end 就可以是實現(xiàn)文件的分塊

如:

file.slice(0,1000); 
file.slice(1000,2000); 
file.slice(2000,3000); 
// ......

文件片段的上傳

上一部我們通過slice方法把文件分成了若干塊,接下來要做的事情就是把這些碎片傳到服務器上。

這里我們用ajax的post請求來實現(xiàn)

var xhr = new XMLHttpRequest(); 
var url = xxx // 文件上傳的地址 可以包括文件的參數(shù) 如文件名稱 分塊數(shù)等以便后臺處理 
xhr.open('POST', url, true); 
xhr.onload = function (e){ 
     // 判斷文件是否上傳成功,如果成功繼續(xù)上傳下一塊,如果失敗重試該快 
} 
xhr.upload.onprogress = function(e){ 
     // 選用 如果文件分塊大小較大 可以通過該方法判斷單片文件具體的上傳進度 
     // e.loaded  該片文件上傳了多少 
     // e.totalSize 該片文件的總共大小 
} 
xhr.send(packet);

文件上傳到后臺后,后臺程序如PHP會做出相應的處理。

標簽:內蒙古 煙臺 玉溪 牡丹江 邯鄲 晉中 安慶 撫州

巨人網絡通訊聲明:本文標題《HTML5實現(xiàn)文件斷點續(xù)傳的方法》,本文關鍵詞  HTML5,實現(xiàn),文件,斷點,續(xù)傳,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5實現(xiàn)文件斷點續(xù)傳的方法》相關的同類信息!
  • 本頁收集關于HTML5實現(xiàn)文件斷點續(xù)傳的方法的相關信息資訊供網民參考!
  • 推薦文章
    嘉黎县| 沙洋县| 丰台区| 应用必备| 乌拉特后旗| 电白县| 云霄县| 盐边县| 闻喜县| 永寿县| 吉安县| 秦皇岛市| 临沧市| 正镶白旗| 禄丰县| 石狮市| 凌云县| 小金县| 阿克陶县| 大渡口区| 禄丰县| 贵南县| 涿州市| 凌海市| 绥化市| 孟州市| 缙云县| 高青县| 吴江市| 延吉市| 连山| 岑巩县| 余江县| 曲阳县| 德昌县| 高清| 云和县| 永清县| 龙井市| 桦南县| 嘉兴市|