Web Uploader + php视频分片上传

由于最近项目中遇到有做视频上传的功能,决定写一篇文章详细说明大文件上传的原理和使用Baidu WebFE(FEX)团队开发的文件上传插件WebUploader。

大文件分片上传原理

利用前端框架WebUploader配置进行对大文件的分片(由Baidu官方测试,每5M一个分片是效率最高的),这里,我的服务端是php,所以需要修改php.ini里面的post_max_size配置,默认是2M,我这里改的是8M。

服务端php接收分片,WebUploader插件会提供一个GUID,可以利用GUID加任意个性化信息做分片名(当然,分片序号需要加上),当所有分片上传完毕后,调用合并请求,对分片进行合并即可。

上传前,我会计算整个文件的MD5值到我们的资源库去查找是否已有相同资源,如果有的话,直接文件共享即可。

Web Uploader基本配置

Web Uploader + php视频分片上传_第1张图片
Web Uploaders配置

上传前的文件验证


Web Uploader + php视频分片上传_第2张图片
对文件的验证处理

PHP后台处理

首先,我们需要创建对应的文件夹


Web Uploader + php视频分片上传_第3张图片
创建文件夹

因为项目需要,我这里创建了五个文件夹存放,分别是分片文件夹、源文件文件夹、视频截图的图片文件夹、截取视频的小视频文件夹和转码后的视频文件夹,因为对上传的视频做后续处理,如截图、转码、生成小视频,这里用到的是ffmpeg,如果有兴趣的同学可以持续关注我,下一篇文章会写关于ffmpeg的使用。

其实服务端做的事情相对比较简单了,每上传的分片写到一个文件里去,最后把分片按照序号合并起来即可。

Web Uploader + php视频分片上传_第4张图片
分片合并

分片的冗余处理

用户上传大文件的时候或多或少会有中断,断网的情况,这个时候服务器就会出现多的分片碎片,这个完全占用服务器存储空间的,所以我们需要对这些所谓的垃圾文件做处理,我们可以设置碎片文件的过期时间,如果超过时间还存在的话,进行删除,或者当天删除前一天的分片文件夹也是可以的,这样相对来说比较省事。

你可能感兴趣的:(Web Uploader + php视频分片上传)