大文件传输解决方案:分片上传 / 下载限速

前言
不少项目中会遇到上传下载视频、更新包、应用程序等文件,此类文件的共同点就是十分巨大,我在项目中遇到过 4G 左右的文件同时 100 多台机器下载,此时如果用 post 上传和下载想一下都不可能,但百度查的话都是说调整 php.ini 的 post 的限制,但这是一个可笑的解决方法,由此就需要用另一种解决方法 – 分片上传和下载限速

在此带大家用 php 实现一下,各种语言和框架同时适用,本次用到的是 php 的 laravel, 语言和实现的思路是一样的

如果项目中用到的分片上传,个人建议找相对应的包如 (AetherUpload-Laravel)、有条件直接用 7 牛云、阿里云等大公司的分片上传服务

分片上传
原理
将需要上传的文件按照一定的分割规则,分割成相同大小的数据块;
初始化一个分片上传任务,返回本次分片上传唯一标识;
按照一定的策略(串行或并行)发送各个分片数据块;
发送完成后,服务端根据判断数据上传是否完整,如果完整,则进行数据块合成得到原始文件。
实现
h5
h5 实现部分,h5 部分实现了把文件的分割,在上传中,告诉服务端文件的总片数和当前是第几片,各个临时文件通过 http 请求发送出去

Document

服务端 服务端接收上传的文件片,并判断是否为最后一块,如果是就合并文件,删除上传的文件块

/**
* @Desc: 切片上传
*
* @param Request $request
* @return mixed
*/
public function sliceUpload(Request $request)
{
$file = $request->file(‘file’);
$blob_num = $request->get(‘blob_num’);
$total_blob_num = $request->get(‘total_blob_num’);
$file_name = $request->get(‘file_name’);

    $realPath = $file->getRealPath(); //临时文件的绝对路径

    // 存储

你可能感兴趣的:(php)