JavaScript实现form表单的多文件上传


Posted in Javascript onMarch 27, 2020

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 + '" >文件下载</a></td></tr>')
  }

  }).fail(function(res) {
  alert("文件上传失败:" + res.msg);
  });
 }else {
  alert("请选择需要上传的文件!");
 }

 });

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJs的Date格式字符代码
Dec 30 Javascript
js中的push和join方法使用介绍
Oct 08 Javascript
ExtJS4如何给同一个formpanel不同的url
May 02 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
JavaScript如何自定义trim方法
Jul 28 Javascript
jQuery实现移动端手机商城购物车功能
Sep 24 Javascript
Bootstrap选项卡学习笔记分享
Feb 13 Javascript
vue.js开发环境安装教程
Mar 17 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
一次围绕setTimeout的前端面试经验分享
Jun 15 Javascript
ES6 Generator基本使用方法示例
Jun 06 Javascript
js实现磁性吸附的示例
Oct 26 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
May 10 #Javascript
利用PM2部署node.js项目的方法教程
May 10 #Javascript
全面解析vue中的数据双向绑定
May 10 #Javascript
利用forever和pm2部署node.js项目过程
May 10 #Javascript
javascript简单链式调用案例分析
May 10 #Javascript
Angular.JS通过指令操作DOM的方法
May 10 #Javascript
JS实现队列的先进先出功能示例
May 10 #Javascript
You might like
example1.php
2006/10/09 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
Python pandas常用函数详解
2018/02/07 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Django 路由系统URLconf的使用
2018/10/11 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
美国旅游网站:Tours4Fun
2017/02/17 全球购物
毕业生自荐信
2013/12/14 职场文书
医院护士的求职信范文
2013/12/26 职场文书
团日活动总结
2014/04/28 职场文书
仰望星空观后感
2015/06/10 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android