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 相关文章推荐
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
PHP防CC攻击实现代码
Dec 29 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 12 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 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
资料注册后发信小技巧
2006/10/09 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
分析经典Python开发工程师面试题
2019/04/08 Python
详解python深浅拷贝区别
2019/06/24 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
python和go语言的区别是什么
2020/07/20 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
大学毕业生简单自荐信
2013/11/05 职场文书
销售工作岗位职责
2013/12/24 职场文书
跟单文员岗位职责
2014/01/03 职场文书
安全大检查反思材料
2014/01/31 职场文书
劲霸男装广告词
2014/03/21 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
垂直极限观后感
2015/06/08 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python