主页 > 知识库 > PHP大文件分块上传功能实例详解

PHP大文件分块上传功能实例详解

热门标签:电子围栏 科大讯飞语音识别系统 阿里云 银行业务 Mysql连接数设置 团购网站 服务器配置 Linux服务器

本文实例讲述了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目录操作技巧汇总》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《PHP网络编程技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:
  • PHP大文件切割上传并带进度条功能示例
  • PHP大文件切割上传功能实例分析
  • PHP大文件分片上传的实现方法
  • PHP大文件分割上传 PHP分片上传
  • PHP搭建大文件切割分块上传功能示例
  • php上传大文件设置方法
  • apache+php上传大文件以上传100M为例
  • 利用discuz实现PHP大文件上传应用实例代码
  • PHP大文件分割分片上传实现代码

标签:大理 衢州 萍乡 枣庄 衡水 广元 蚌埠 江苏

巨人网络通讯声明:本文标题《PHP大文件分块上传功能实例详解》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266