最近公司項目需要完成一個微課上傳的需求? 最開始是通過騰訊云簡單上傳對象操作 直接上傳(公司資源都是保存在騰訊云)玉转。這個基本上傳個50M左右沒什么問題搂抒,但是由于PHP的最大請求時間限制 加上產品要求做一個真實進度條這時候犯難了? 畢竟之前沒做過(以前都是拿前端插件做的假進度條)蒋纬。經過多方百度 最后確定了? 分片上傳的思路? 接下來給大家分享下 我做這個分片上傳的步驟
首先前面說了我們資源是保存在騰訊云的所以調用上傳的接口其實就是騰訊云的存儲桶源梭!
說分片上傳 那我們就要說一下什么是分片铺呵,其實一開始我也不是很明白 其實現(xiàn)在我也不知道理解的對不對? 只是說一下我的理解 還望指正!
簡單的說比如你是100M視頻? ?那么為了避免上傳請求超時 那么我們就要把他切割成一些小文件? 你可以分成10塊每塊10M 派撕、20塊每塊5M婉弹,自己去定義? 那么正常情況下? ?你傳5M的視頻是不會超時的? ?不僅解決了超時的問題 還能夠實現(xiàn)真實進度條的顯示 5% 10% 這樣去遞增 話不多說? 我們直接來說說實現(xiàn)方式
1.前端切片
首先要明白? 將100M分成 10個或者20個小文件? 這個過程是在前端完成的 前端切割上傳到后臺最后合并 這一點在騰訊的接口上也是體現(xiàn)出來了 后面會說到!文件切割的代碼我就不貼了? 自己去百度很多我這里主要是記錄一下思路?
2.初始化上傳
分塊上傳對象: 初始化分塊上傳终吼, 上傳分塊马胧, 完成分塊上傳。
這是騰訊云給出的步驟? 大概就是首先你需要建立一個唯一的上傳過程衔峰,初始化之后會返回一個上傳ID給你? 這個id在后面很多地方都需要用到? 這一步需要兩個參數(shù) 一個是你的存儲桶標識 另外一個實際上你可以理解為你上傳之后你在桶里的存放位置xx/xxx/xxx.MP4?
3.上傳分塊
這一步除了前面說的幾個基礎參數(shù)以外多了??Body、PartNumber? ?
Body 實際上就是文件信息?fopen($file->getRealPath(), 'rb') --- 這里我被困擾了很久
PartNumber? ?這個實際上就是切片的編號 10片? 那就是1-10? ?依次遞增(順序不能亂)?
4.完成上傳
Parts? ?將你每次上傳的塊以array的形式傳參?ETag每個分塊的MD5值? ?另外一個就是我們前面說的分塊編號
完成上傳之后? 官方文檔好像沒看到返回參數(shù)的說明(也許是我沒找到)
返回里面ETag 這個參數(shù)為文件的md5值? 這個值可以和文件地址一起存起來? ?這樣下次上傳同樣MD5值文件的時候? 我們就不必走這么多流程了 直接返回已有地址即可??
好了? 以上就是我做這個分片的過程蛙粘!
既是分享垫卤,也是溫習〕瞿粒互相學習穴肘,多謝指正。