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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
PHP 工厂模式使用方法
May 18 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
php中简单的对称加密算法实现
Jan 05 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 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
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
php实现的简单日志写入函数
2015/03/31 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
php fread读取文件注意事项
2016/09/24 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
PHP7 弃用功能
2021/03/09 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
React实现全选功能
2020/08/25 Javascript
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
init进程的作用
2015/08/20 面试题
售后服务经理岗位职责范本
2014/02/22 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
出差报告怎么写
2014/11/06 职场文书
公司停电通知
2015/04/15 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL