ajax上传-基于html5 FormData的批量文件上传
参考:https://www.cnblogs.com/imwtr/p/5924042.html
转自:https://blog.csdn.net/sinat_34492035/article/details/80477858
不使用FormData,直接用 <input type="file" name="file" multiple> 也可以实现批量上传。本例是ajax方式多个文件同时上传,也可以基于FormData采用ajax循环上传多个文件。更多功能可通过理解下面的原理自行扩展。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding:0;} ul{ list-style:none; } ul{ width:700px; border:2px solid red; padding:10px; } .clearfix:after{ display: block; content:''; overflow: hidden; visibility: hidden; clear: both; height:0; } .content ul li{ float:left; width:100px; height:100px; margin:0 10px; border:1px solid #ccc; } .addFile{ background:url("../img/icon12.png") no-repeat; background-position: center center; } #attach{ width:100%; height:100%; opacity:0; } </style> </head> <body> <form action="formData_test.php" id="form"> <div class="content"> <ul class="clearfix ul-box"> <li class="addFile"> <input type="file" id="attach" multiple require /> </li> </ul> </div> <input type="text" name="name"/> <input type="text" name="age"/> <input type="text" name="sex"/> <input type="button" value="上传" class="subBtn"/> </form> </body> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script> //定义一个数组 把文件数组的值给新数组 对新数组进行操作 然后把新数组传递给后台 var curFiles = []; $("#attach").change(function(){ var fileArr = $(this)[0].files; Array.prototype.push.apply(curFiles, fileArr); // var fileArr = this.files; console.log(fileArr); //这里展示的话 还是用fileArr for(var i=0;i<fileArr.length;i++){ console.log(fileArr[i]); var item = fileArr[i]; var abc=$("<li class='showf'><p style='overflow:hidden;text-overflow:ellipsis; '>文件名:"+item.name+"</p>"+ "<p>大小:"+(item.size/1024).toFixed(2)+"KB</p></li>"); $(".ul-box").prepend(abc); } // fileArr.map(function(item,index,arr){ // var abc=$("<li><p>文件名:"+item.name+"</p>"+ // "<p>大小:"+parseInt(item.size/1024)+"KB</p></li>"); // $(".ul-box").prepend(abc); // }) }) $(".ul-box").on("click",".showf",function(){ var index = $(".showf").index($(this)); alert(index); var name = $(this).find("p").eq(0).html(); console.log(curFiles); // curFiles = curFiles.filter(function(file) { // return file.name != name; // }); curFiles.splice(index,1) console.log(curFiles); $(this).remove(); }) $(".subBtn").click(function(){ // 构建FormData对象 var fd = new FormData($('#form')[0]); for (var i = 0, j = curFiles.length; i < j; ++i) { fd.append('attach[]', curFiles[i]); } for(var pair of fd.entries()) { console.log(pair[0]+ ', '+ pair[1]); } $.ajax({ url: 'formData_test.php', type: 'post', data: fd, processData: false, contentType: false, success: function(rs) { console.log(rs); }, error: function(err) { } }); }) </script> </html>
formData_test.php源码:
<?php $files = $_FILES['attach']; var_dump($files); ?>