本文实例讲述了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程序设计有所帮助。
© 版权声明
THE END
暂无评论内容