由于最近項(xiàng)目中遇到有做視頻上傳的功能,決定寫一篇文章詳細(xì)說明大文件上傳的原理和使用Baidu WebFE(FEX)團(tuán)隊開發(fā)的文件上傳插件WebUploader俩功。
大文件分片上傳原理
利用前端框架WebUploader配置進(jìn)行對大文件的分片(由Baidu官方測試憾儒,每5M一個分片是效率最高的),這里跟啤,我的服務(wù)端是php诽表,所以需要修改php.ini里面的post_max_size配置,默認(rèn)是2M隅肥,我這里改的是8M竿奏。
服務(wù)端php接收分片,WebUploader插件會提供一個GUID腥放,可以利用GUID加任意個性化信息做分片名(當(dāng)然泛啸,分片序號需要加上),當(dāng)所有分片上傳完畢后秃症,調(diào)用合并請求候址,對分片進(jìn)行合并即可。
上傳前种柑,我會計算整個文件的MD5值到我們的資源庫去查找是否已有相同資源岗仑,如果有的話,直接文件共享即可聚请。
Web Uploader基本配置
上傳前的文件驗(yàn)證
PHP后臺處理
首先荠雕,我們需要創(chuàng)建對應(yīng)的文件夾
因?yàn)轫?xiàng)目需要,我這里創(chuàng)建了五個文件夾存放良漱,分別是分片文件夾舞虱、源文件文件夾、視頻截圖的圖片文件夾母市、截取視頻的小視頻文件夾和轉(zhuǎn)碼后的視頻文件夾矾兜,因?yàn)閷ι蟼鞯囊曨l做后續(xù)處理,如截圖患久、轉(zhuǎn)碼椅寺、生成小視頻浑槽,這里用到的是ffmpeg,如果有興趣的同學(xué)可以持續(xù)關(guān)注我返帕,下一篇文章會寫關(guān)于ffmpeg的使用桐玻。
其實(shí)服務(wù)端做的事情相對比較簡單了,每上傳的分片寫到一個文件里去荆萤,最后把分片按照序號合并起來即可镊靴。
分片的冗余處理
用戶上傳大文件的時候或多或少會有中斷,斷網(wǎng)的情況链韭,這個時候服務(wù)器就會出現(xiàn)多的分片碎片偏竟,這個完全占用服務(wù)器存儲空間的,所以我們需要對這些所謂的垃圾文件做處理敞峭,我們可以設(shè)置碎片文件的過期時間踊谋,如果超過時間還存在的話,進(jìn)行刪除旋讹,或者當(dāng)天刪除前一天的分片文件夾也是可以的殖蚕,這樣相對來說比較省事。