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表达式
Oct 09 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
Mar 10 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
php中的常用魔术方法汇总
Feb 14 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 PHP
PHP中echo与print区别点整理
Mar 09 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
自己前几天写的无限分类类
2007/02/14 PHP
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
基于php中使用excel的简单介绍
2013/08/02 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
Python实现获取某天是某个月中的第几周
2015/02/11 Python
Python 元类实例解析
2018/04/04 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
业务主管岗位职责
2013/11/20 职场文书
商场促销活动方案
2014/02/08 职场文书
家长对孩子的评语
2014/04/18 职场文书
司法助理专业自荐书
2014/06/13 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
黄山导游词
2015/01/31 职场文书
贫困生证明范文
2015/06/16 职场文书