首頁 web前端 H5教程 HTML5實作文件斷點續傳的方法

HTML5實作文件斷點續傳的方法

Feb 21, 2017 pm 01:46 PM

HTML5的FILE api,有一個slice方法,可以將BLOB物件分割。前端透過FileList物件取得對應的文件,依照指定的分割方式將大文件分段,然後一段一段地傳給後端,後端再依序一段將文件進行拼接。

斷點續傳原理

目前比較常用的斷點續傳的方法有兩種,一種是透過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請求來實作

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);
登入後複製



#檔案上傳到後台後,後台程式如PHP會做出對應的處理。

以上就是HTML5實作檔案斷點續傳的方法 的內容,更多相關內容請關注PHP中文網(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

HTML 中的巢狀表

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 中的表格邊框

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

在 HTML 中移動文字

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符

See all articles