由于最近項目中遇到有做視頻上傳的功能,決定寫一篇文章詳細說明大文件上傳的原理和使用Baidu WebFE(FEX)團隊開發(fā)的文件上傳插件WebUploader。
大文件分片上傳原理
利用前端框架WebUploader配置進行對大文件的分片(由Baidu官方測試,每5M一個分片是效率最高的),這里,我的服務(wù)端是php,所以需要修改php.ini里面的post_max_size配置,默認是2M,我這里改的是8M。
服務(wù)端php接收分片,WebUploader插件會提供一個GUID,可以利用GUID加任意個性化信息做分片名(當然,分片序號需要加上),當所有分片上傳完畢后,調(diào)用合并請求,對分片進行合并即可。
上傳前,我會計算整個文件的MD5值到我們的資源庫去查找是否已有相同資源,如果有的話,直接文件共享即可。
Web Uploader基本配置

上傳前的文件驗證

PHP后臺處理
首先,我們需要創(chuàng)建對應(yīng)的文件夾

因為項目需要,我這里創(chuàng)建了五個文件夾存放,分別是分片文件夾、源文件文件夾、視頻截圖的圖片文件夾、截取視頻的小視頻文件夾和轉(zhuǎn)碼后的視頻文件夾,因為對上傳的視頻做后續(xù)處理,如截圖、轉(zhuǎn)碼、生成小視頻,這里用到的是ffmpeg,如果有興趣的同學可以持續(xù)關(guān)注我,下一篇文章會寫關(guān)于ffmpeg的使用。
其實服務(wù)端做的事情相對比較簡單了,每上傳的分片寫到一個文件里去,最后把分片按照序號合并起來即可。

分片的冗余處理
用戶上傳大文件的時候或多或少會有中斷,斷網(wǎng)的情況,這個時候服務(wù)器就會出現(xiàn)多的分片碎片,這個完全占用服務(wù)器存儲空間的,所以我們需要對這些所謂的垃圾文件做處理,我們可以設(shè)置碎片文件的過期時間,如果超過時間還存在的話,進行刪除,或者當天刪除前一天的分片文件夾也是可以的,這樣相對來說比較省事。