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