參考自七牛云
https://developer.qiniu.com/kodo/manual/1650/chunked-upload
分片上傳支持將一個文件切割為一系列特定大小的數據片,分別將這些小數據片上傳到服務端,全部上傳完后再在服務端將這些數據片合并成為一個資源。
分片上傳引入了兩個概念:塊(Block)和片(Chunk)。每個塊由一到多個片組成,而一個資源則由一到多個塊組成。他們之間的關系可以用下圖表述:
塊和片是上傳過程中作為臨時存儲的單位。服務端會以約七天為單位的周期清除上傳后未被合并為塊(文件)的數據片(塊)。
與分片上傳相關的 API 有:創建塊(mkblk)、上傳片(bput)、創建文件(mkfile)。一個完整的分片上傳流程可用下圖表示:
其中的關鍵點如下:
將待上傳的文件按預定義塊大小切分為若干個塊(每塊大小不大于 4MB)。如果這個文件小于 4MB,就只有一個塊。
將每個塊再按預定義的片大小切分為若干個片,先在服務端創建一個相應塊(通過調用mkblk,并帶上第一個片的內容),然后再循環將所有剩下的片全部上傳(通過調用bput,從而完成一個塊的上傳)
在所有塊上傳完成后,通過調用mkfile將這些上傳完成的塊信息再嚴格的按順序組裝出一個邏輯資源的元信息,從而完成整個資源的分片上傳過程。
如要更準確的理解這個基本流程,可以通過閱讀 SDK 源代碼。所有 SDK 的源代碼都公開托管在Github上。