这里实现的是用<input type='file'>元素实现多文件上传
第一步:
html:
input元素加上mutiple属性
<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>
第二步:
js:
声明变量
var $button = $('#upload'), //选择文件按钮 $file = $("#choose-file"), //回显的列表 $list = $('.file-list'), //选择要上传的所有文件 fileList = [], sendList = []; //当前选择上传的文件 var curFile ;
选择按钮change事件,实例化fileReader,调它的readAsDataURL并把原生File对象传给它,监听它的onload事件,load完读取的结果就在它的result属性里了。它是一个base64格式的,可直接赋值给一个img的src.
$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;
})
Live and learn ;)
浙公网安备 33010602011771号