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将数据导入到Foxmail
Oct 09 PHP
PHP中上传大体积文件时需要的设置
Oct 09 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
Apr 13 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
Aug 22 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
PHP编写RESTful接口
Feb 23 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
python批量修改文件名的示例
2020/09/27 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
土木工程毕业生自荐信
2013/09/21 职场文书
数学系毕业生求职信
2014/05/29 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript