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 minixml详解
Jul 19 PHP
php文件操作实例代码
May 10 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
PHP中redis的用法深入解析
Feb 20 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
php常用数学函数汇总
Nov 21 PHP
discuz目录文件资料汇总
Dec 30 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
php写入mysql中文乱码的实例解决方法
Sep 17 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
htm调用JS代码
2007/03/15 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
vue中监听返回键问题
2019/08/28 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
python使用Tesseract库识别验证
2018/03/21 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
python Matplotlib模块的使用
2020/09/16 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
2014信息公开实施方案
2014/02/22 职场文书
社保委托书怎么写
2014/08/02 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
道德模范事迹材料
2014/12/20 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python