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(2)
Oct 09 PHP
PHP通用分页类page.php[仿google分页]
Aug 31 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
php用户注册时常用的检验函数实例总结
Dec 22 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
php按单词截取字符串的方法
Apr 07 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
PHP回调函数简单用法示例
May 08 PHP
php和html的区别点详细总结
Sep 24 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 Squid中可缓存的动态网页设计
2008/09/17 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php中__toString()方法用法示例
2016/12/07 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
pymssql ntext字段调用问题解决方法
2008/12/17 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
家长给孩子的表扬信
2014/01/17 职场文书
迟到检讨书5000字
2014/01/31 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
工作保证书
2015/01/17 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
元旦主持词开场白
2015/05/29 职场文书
致青春观后感
2015/06/09 职场文书
房产遗嘱范本
2015/08/06 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python