最近在弄檔案上傳的功能,由於涉及到大檔案就會出現前端提交到後端很慢或者超時的現象。所以本文講一下斷點/分片續傳的方案。以下提供三種方案 :前提前端進行根據檔案閾值進行切割分片提交多個分片到後台,每次與後台互動進行乙個分片互動。涉及前端進度條的問題,可以使用假進度條實現(如果使用真進度條,需要頻繁請求後端方知上傳真實進度,此方式拋棄)
一、利用資料庫記錄上傳分片的進度
前端把大檔案進行按照設定的檔案閾值進行分片好,進行提交後台進行上傳分片檔案,每次上傳完分片資料庫記錄分片資訊,下次前端提交上傳時,校驗該分片是否符合下個分片,整個大檔案的分片提交完,則合併分片檔案到正式儲存目錄
二、利用多個臨時檔案記錄上傳分片進度
前端把大檔案進行按照設定的檔案閾值進行分片好,進行提交後台進行上傳分片檔案,每次上傳完分片建立臨時檔案記錄分片資訊,下次前端提交上傳時,利用是否存在該分片檔案且校驗分片檔案大小,如果不一致則刪除分片檔案,接收前端上傳檔案進行上傳,整個大檔案的分片提交完,則合併分片檔案到正式儲存目錄
三、利用單個臨時檔案記錄上傳進度
前端把大檔案進行按照設定的檔案閾值進行分片好,進行提交後台進行上傳分片檔案,每次上傳分片判斷臨時檔案是否存在,否則需建立臨時檔案(代表該操作的唯一標識檔案),上傳的分片檔案內容輸入到這個臨時檔案,下次前端提交分片上傳時,利用是否存在該臨時檔案且校驗臨時檔案的大小是否匹配上傳的分片開始處大小(每次互動前 前端需請求詢問後端該檔案上傳的最終大小是多少, 以便前端進行續傳)繼續輸入分片內容到臨時檔案,接收前端上傳檔案進行上傳,整個大檔案的分片提交完,則把臨時檔案拷貝到正式儲存的檔案進行儲存。
推薦使用第三種,相比資料庫記錄方式可以對第三方進行解耦。
HTTP 斷點續傳
客戶端請求域 range 格式如下例子 第乙個500位元組 位元組偏移量0 499,包括0和499 range bytes 0 499 第二個500位元組 位元組偏移量500 999,包括500和999 range bytes 500 999 最後500位元組 位元組偏移量9500 9999,包括9...
IOS斷點續傳
asihttprequest可以實現斷點續傳。網上有一些介紹類似使用 request setallowresumeforfiledownloads yes 不過,通過asihttprequest的非同步請求以及delegate還是可以實現斷點續傳的。本文還是以grails編寫斷點續傳伺服器端為例。非...
linux斷點續傳
在linux伺服器上經常要用scp傳輸大檔案,可能由於網路等原因出現間接性中斷,導致傳輸一半的檔案突然中斷。其實scp是可以續傳的,它需要rsync以及它的ssh協議 舉例如下 rsync p rsh ssh home.tar 192.168.205.34 home home.tar,再輸出密碼後,...