PHP大文件分块上传功能实例详解


Posted in PHP onJuly 22, 2019

本文实例讲述了PHP大文件分块上传功能。分享给大家供大家参考,具体如下:

前端代码

使用file.slice将文件进行分割,然后分别进行异步上传。

<!DOCTYPE html>
<html lang="zh-cn">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title><%= title %></title>
  <!-- zui -->
  <link rel="stylesheet" href="http://zui.sexy/dist/css/zui.min.css" rel="external nofollow" >
 </head>
 <body>
  <div class="container" style="margin-top: 30px;">
    <form class="form-inline" method="post" enctype="multipart/form-data">
     <div class="form-group">
      <input type="file" id="fileBig" class="form-control">
     </div>
     <button type="submit" class="btn btn-primary">提交</button>
    </form>
  </div>
  <!-- ZUI Javascript 依赖 jQuery -->
  <script src="http://zui.sexy/assets/jquery.js"></script>
  <!-- ZUI 标准版压缩后的 JavaScript 文件 -->
  <script src="http://zui.sexy/dist/js/zui.min.js"></script>
  <script type="text/javascript">
    $('form').submit(function() {
      let file = $(":file")[0].files[0];
      let fileName = file.name;
      let fileSize = file.size;
      console.log('fileSize',fileSize);
      let blockSize = 0.9*1024*1024;
      let num = Math.ceil(fileSize/blockSize);
      let start = 0;
      let end = 0;
      for(let i=1;i<=num;i++){
        end = blockSize*i;
        if(end > fileSize){
          end = fileSize;
        }
        let block = file.slice(start,end);
        start = end;
        let fd = new FormData();
        fd.append('block',block);
        fd.append('name',fileName);
        fd.append('total',num);
        fd.append('index',i);
        $.ajax({
          url:"upload.php",
          type:"POST",
          data:fd,
          async:true,
          processData:false,
          contentType:false,
          success:(res)=>{
            console.log('res_'+i+":");
            console.log(res);
          }
        })
      }
      return false;
    });
  </script>
 </body>
</html>

后端代码

在所有的文件上传成功之后,合并生成原来的大文件

<?php
$name = $_POST['name'];
$index = $_POST['index'];
$total = $_POST['total'];
echo "name:".$name.PHP_EOL;
echo "index:".$index.PHP_EOL;
echo "total:".$total.PHP_EOL;
move_uploaded_file($_FILES['block']['tmp_name'],'upload/'.$name."_".$index);
$list = scandir('upload');
$num = count($list)-2;
echo "cur_num:".$num.PHP_EOL;
if($num == $total){
  echo "upload done".PHP_EOL;
  echo $cmd = "cat upload/'{$name}_'* > upload/'{$name}'";
  shell_exec($cmd);
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php笔记之:php数组相关函数的使用
Apr 26 PHP
thinkphp3查询mssql数据库乱码解决方法分享
Feb 11 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
Zend Framework教程之MVC框架的Controller用法分析
Mar 07 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
php上传excel表格并获取数据
Apr 27 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
PHP中的self关键字详解
Jun 23 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 #PHP
php多进程应用场景实例详解
Jul 22 #PHP
PHP实现的多进程控制demo示例
Jul 22 #PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 #PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 #PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 #PHP
PHP INT类型在内存中占字节详解
Jul 20 #PHP
You might like
PHP中GET变量的使用
2006/10/09 PHP
php设计模式小结
2013/02/15 PHP
php车辆违章查询数据示例
2016/10/14 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
JavaScript中的事件处理
2008/01/16 Javascript
js CSS操作方法集合
2008/10/31 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
廉政教育心得体会
2014/01/01 职场文书
2014年自我评价
2014/01/04 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
早会主持词
2014/03/17 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
安全生产月宣传标语
2014/10/06 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
水电工岗位职责
2015/02/14 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
MySQL系列之二 多实例配置
2021/07/02 MySQL