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


    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("请选择需要上传的文件!");
    }

    });

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

  • 相关阅读:
    Java Volatile keyword
    解决 The &#39;InnoDB&#39; feature is disabled; you need MySQL built with &#39;InnoDB&#39; to have it working
    【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
    【DP】UVA 624 CD 记录路径
    ns3加入模块之vanet-highway
    awk向脚本传递參数(二)
    【传递正能量】献给默默追梦的人
    算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
    Webstorm/IntelliJ Idea 过期破解方法
    CenterOS下安装NodeJS
  • 原文地址:https://www.cnblogs.com/jpfss/p/9474963.html
Copyright © 2020-2023  润新知