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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
深思 PHP 数组遍历的差异(array_diff 的实现)
Mar 23 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
记录mysql性能查询过程的使用方法
May 02 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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
在普通HTTP上安全地传输密码
2007/07/21 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
Python列表解析配合if else的方法
2018/06/23 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
python实现图片插入文字
2019/11/26 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
新闻专业推荐信范文
2013/11/20 职场文书
酒店个人培训自我鉴定
2013/12/11 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
2014年党员整改措施
2014/10/24 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
感谢信模板大全
2015/01/23 职场文书