js+php实现同时并发上传多个文件或文件夹
当我们上传大型文件或者很多文件(比如一个文件夹,包含很多子文件和子目录),如果采用传统的方式,一个接一个上传,可定很慢,那么有没有一种方式可以同时将所有的文件并行上传到服务器,最后汇总一下,有点像hadoop的map/reduce的模式,答案肯定是有的,js本身就是机遇event的异步单线程设计,异步的特性决定了不必等地io时间,直接去处理其他的事情。好了,那么首先解决怎么同时上传多个文件和文件夹的事情。
一、怎么选择文件夹和多个文件?
上传多个文件(multiple 属性ie9以上才支持)
<input type="file" name="file" multiple="multiple" />上传整个文件夹目录(webkitdirectory属性只有chrome及chrome内核的浏览器和火狐支持)
<input type='file' name="file" webkitdirectory />//那么接下来解决怎么同时上传的问题
二、怎么同时上传?
思路一、我们将多个文件放进Formdata构建form数据结合ajax来启动上传,代码如下
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>BFW NEW PAGE</title> <script id="bfwone" data="dep=jquery.17&err=0" type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/bfwone.js"></script> <script type="text/javascript"> var files = []; bready(function() { $("#uploadfolder").change(function() { files = this.files; }); $("#upload-btn").click(function() { var fd = new FormData(); console.log(files); for (var i = 0; i < files.length; i++) { fd.append("file[]", files[i]); } $.ajax({ type: 'POST', url: "/FolderUpload", data: fd, cache: false, processData: false, contentType: false, dataType: 'json', success: function (ret) {}, complete: function(XMLHttpRequest, textStatus) {} }); }); }); </script> <style> </style> </head> <body> <input type='file' id="uploadfolder" name="file" multiple="multiple" /> <button id="upload-btn">上传多个文件</button> </body> </html>
那么后端php怎么接受呢
<?php function reArrayFiles(&$file_post) { $file_ary = array(); $file_count = count($file_post['name']); $file_keys = array_keys($file_post); for ($i=0; $i<$file_count; $i++) { foreach ($file_keys as $key) { $file_ary[$i][$key] = $file_post[$key][$i]; ...
点击查看剩余70%
网友评论1