JavaScript实现form表单的多文件上传
程序员文章站
2022-05-28 18:37:52
form表单的多文件上传,具体内容如下
formdata对象可以使用一系列的键值对来模拟一个完整的表单,然后使用ajax来发送这个表单
使用
form表单的多文件上传,具体内容如下
formdata对象可以使用一系列的键值对来模拟一个完整的表单,然后使用ajax来发送这个表单
使用<form>表单初始化formdata对象的方式上传文件
<!--文件上传--> <form id="uploadform" enctype="multipart/form-data"> <div class="row" style="margin-top: 20px;"> <div class="form-group col-md-12" id="file"> <input type="hidden" name="_csrf-application" value="<?= $csrf ?>"> <div class="form-group field-uploadform-excelfiles" style="margin-left: 30px;"> <label class="control-label btn btn-primary" for="uploadform-excelfiles">选择文件</label> <input type="file" id="uploadform-excelfiles" name="uploadform[excelfiles][]" multiple class="attachment-upload" accept=".xlsx"> <input type="button" id="fileupload" value="上传文件" class="btn btn-success" style="margin-left: 15px;"> <div class="help-block"></div> <div id="filename"></div> </div> </div> </div> <table role="presentation" class="table"><tbody id="files"></tbody></table> </form>
注意:
1. 使用formdata对象进行表单上传必须要为form添加enctype="multipart/form-data"属性
2. 使用formdata对象进行表单上传必须要对其开始填入的值按照name属性放入该对象中,不能开始使用action上传,后面使用formdata进行上传,这样会导致上传数据出现错误
获取change事件改变的文件
var filelist; var allfile = []; //formdata对象初始化 var form = document.getelementbyid("upload-form"); var formdata = new formdata(form); $("#uploadform-excelfiles").on('change', function (e) { //获取表单数据并传入formdata中 var norm = $("#norm").val(); var major = $("#major").val(); var type = $("#type").val(); formdata.set("norm",norm); formdata.set("major",major); formdata.set("type",type); var fileerror = 0; filelist = e.currenttarget.files; $.each(filelist, function (index, item) { var filename = item.name; var fileend = filename.substring(filename.indexof(".")); //上传文件格式判断 if (fileend == ".xlsx") { allfile.push(item); $('#files').append( '<tr style="padding-top: 7px;">' + '<td>'+filename+'</td>' + '<td>'+(item.size / 1024).tofixed(2)+'k</td>' + '<td><input type="button" class="btn btn-danger delete" value="删除"></td>' + '</tr>'); //追加文件 formdata.append('uploadform[excelfiles][]',item); } else { fileerror++; } }); if (fileerror > 0) { alert("只能上传 “.xlsx” 格式的文件!"); document.getelementbyid("upload-form").reset(); return; } var filecount = $('#files').find('tr').length; $('#filename').html('共上传 ' + filecount + ' 个文件'); });
删除按钮事件
$('#files').on('click','.delete',function (e) { var savefile = []; var norm = $("#norm").val(); var major = $("#major").val(); var type = $("#type").val(); var deletename = e.target.parentnode.previouselementsibling.previouselementsibling.textcontent; var deleteindex; //将不删除的放入数组中 $.each(allfile,function (index, item) { if(item.name == deletename){ deleteindex = index; }else { savefile.push(item); } }); allfile.splice(deleteindex,1); //表单数据重置 formdata.set("norm",norm); formdata.set("major",major); formdata.set("type",type); formdata.delete('uploadform[excelfiles][]'); //将不删除的数组追加的formdata中 $.each(savefile,function (index, item) { formdata.append('uploadform[excelfiles][]',item); }); e.target.parentnode.parentnode.remove(); var filecount = $('#files').find('tr').length; $('#filename').html('共上传 ' + filecount + ' 个文件'); });
文件上传事件
$("#fileupload").on('click',function () { var len = formdata.getall('uploadform[excelfiles][]').length; $("#overlay").show(); if(len > 1){ var deletebtn = $(".delete"); //通过ajax进行上传 $.ajax({ url: '/finalize/upload', type: 'post', cache: false, data: formdata, processdata: false, contenttype: false }).done(function(res) { if(res.code == 'ok'){ //进度条设置 var value = 0; var timer2 = setinterval(function () { value ++; $("#progress").css('width', value + "%"); if (value == 120) { clearinterval(timer2); $("#overlay").hide(); alert("文件上传成功!"); } }, 50); //删除对应按钮 $("#fileupload").css("display","none"); $.each(deletebtn,function (index, item) { $(item).css("display","none"); }); $('#files').append('<tr><td><td><td><a type="button" class="btn btn-success pull-right" id="filedown" href="/finalize/get-file?id=' + res.data.id + '" rel="external nofollow" >文件下载</a></td></tr>') } }).fail(function(res) { alert("文件上传失败:" + res.msg); }); }else { alert("请选择需要上传的文件!"); } });
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 微信小程序之购物车功能
下一篇: javascript简单链式调用案例分析