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生成HTML静态页面实例代码
Aug 31 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
destoon二次开发入门示例
Jun 20 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
php递归json类实例
Dec 02 PHP
php获取访问者IP地址汇总
Apr 24 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
PHP中类的自动加载的方法
Mar 17 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
PHP创建XML接口示例
Jul 04 PHP
php判断目录存在的简单方法
Sep 26 PHP
用php实现分页效果的示例代码
Dec 10 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
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
讲解python参数和作用域的使用
2013/11/01 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
Python中logging实例讲解
2019/01/17 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
培训心得体会
2013/12/29 职场文书
大学生实习思想汇报
2014/01/12 职场文书
新年爱情寄语
2014/04/08 职场文书
医药销售自荐书
2014/05/29 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server