您的位置:首页 > 编程学习 > > 正文

php上传文件的要求(PHP大文件分块上传功能实例详解)

更多 时间:2022-01-14 02:26:45 类别:编程学习 浏览量:1469

php上传文件的要求

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

本文实例讲述了PHP大文件分块上传功能。分享给大家供大家参考,具体如下:

前端代码

使用file.slice将文件进行分割,然后分别进行异步上传。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • <!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>
  •   <li class="container" style="margin-top: 30px;">
  •     <form class="form-inline" method="post" enctype="multipart/form-data">
  •      <li class="form-group">
  •       <input type="file" id="fileBig" class="form-control">
  •      </li>
  •      <button type="submit" class="btn btn-primary">提交</button>
  •     </form>
  •   </li>
  •   <!-- 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>
  • 后端代码

    在所有的文件上传成功之后,合并生成原来的大文件

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • <?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程序设计有所帮助。

    原文链接:https://blog.csdn.net/koastal/article/details/78984569

    您可能感兴趣