這裏實現的是用<input type='file'>元素實現多文件上傳javascript
演示地址css
第一步:html
html:java
input元素加上mutiple屬性ajax
<form > <div> <input type="file" id="choose-file" multiple> <a href="javascript:;" id="upload">上傳</a> </div> <ul class="file-list"> </ul> </form>
css:數組
<style> .file-list{ padding: 20px; background: lightblue; list-style-type: none; } .file-list img{ max-width: 70px; vertical-align: middle; } .file-list .file-item{margin-bottom: 10px} .file-list .file-item .file-name{margin-left: 20px} .file-list .file-item .file-del{ color: red; margin-left: 200px;} </style>
第二步:app
js:ide
聲明變量post
var $button = $('#upload'), //選擇文件按鈕 $file = $("#choose-file"), //回顯的列表 $list = $('.file-list'), //選擇要上傳的全部文件 fileList = [], sendList = []; //當前選擇上傳的文件 var curFile ;
選擇按鈕change事件,實例化fileReader,調它的readAsDataURL並把原生File對象傳給它,監聽它的onload事件,load完讀取的結果就在它的result屬性裏了。它是一個base64格式的,可直接賦值給一個img的src.this
$file.on('change',function(){
//原生的文件對象,至關於$file.get(0).files[0]; curFile = this.files;
//將FileList對象變成數組 fileList = fileList.concat(Array.from(curFile)); for(var i=0,len = curFile.length;i < len;i++){ reviewFile(curFile[i]) } }) function reviewFile(file){
//實例化fileReader, let fd = new FileReader();
//獲取當前選擇文件的類型 let fileType = file.type;
//調它的readAsDataURL並把原生File對象傳給它, fd.readAsDataURL(file);//base64
//監聽它的onload事件,load完讀取的結果就在它的result屬性裏了
fd.onload = function(){ if(/^image\/[jpeg|png|jpg|gif]/.test(fileType)){ $list.append('<li class="file-item"><img src="'+this.result+'" alt=""><span class="file-name">'+file.name+'</span><span class="file-del">刪除</span></li>') }else{ $list.append('<li class="file-item"><span class="file-name">'+file.name+'</span><span class="file-del">刪除</span></li>') } } }
點擊刪除按鈕事件:
$(".file-list").on('click','.file-del',function(){ let $parent = $(this).parent(); let index = $parent.index(); fileList.splice(index,1); $parent.remove() });
點擊上傳按鈕事件:
$button.on('click',function(){ if(fileList.length>0){ for(var i=0,len = fileList.length;i < len;i++){ let formData = new FormData(); formData.append('file',fileList[i]); $.ajax({ url:'/oss/file/uploadFiles', type:'post', data:formData, processData:false, contentType:false, success:function(data,statusText,headers){ if(data.success){ var filed = data.data[0]; sendList.push(filed); } } }) } }else{ alert("請選擇文件!") } return false; })