溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript實現(xiàn)form表單的多文件上傳的方法

發(fā)布時間:2021-04-12 09:39:36 來源:億速云 閱讀:264 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)JavaScript實現(xiàn)form表單的多文件上傳的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

form表單的多文件上傳,具體內(nèi)容如下

formData對象可以使用一系列的鍵值對來模擬一個完整的表單,然后使用Ajax來發(fā)送這個表單

使用<form>表單初始化FormData對象的方式上傳文件

<!--文件上傳-->
 <form id="uploadForm" enctype="multipart/form-data">
 <div class="row" >
 <div class="form-group col-md-12" id="file">  
  <input type="hidden" name="_csrf-application"
   value="<?= $csrf ?>">
  <div class="form-group field-uploadform-excelfiles" >
  <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" >
  <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對象進(jìn)行表單上傳必須要為form添加enctype="multipart/form-data"屬性
2. 使用formData對象進(jìn)行表單上傳必須要對其開始填入的值按照name屬性放入該對象中,不能開始使用action上傳,后面使用formData進(jìn)行上傳,這樣會導(dǎo)致上傳數(shù)據(jù)出現(xiàn)錯誤

獲取change事件改變的文件

 var fileList;
 var allFile = [];
 //FormData對象初始化
 var form = document.getElementById("upload-form");
 var formData = new FormData(form);
 $("#uploadform-excelfiles").on('change', function (e) {
 //獲取表單數(shù)據(jù)并傳入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 >' +
     '<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;
 //將不刪除的放入數(shù)組中
 $.each(allFile,function (index, item) {
  if(item.name == deleteName){
   deleteIndex = index;
  }else {
  saveFile.push(item);
  }
 });
 allFile.splice(deleteIndex,1);
 //表單數(shù)據(jù)重置
 formData.set("norm",norm);
 formData.set("major",major);
 formData.set("type",type);
 formData.delete('UploadForm[excelFiles][]');
 //將不刪除的數(shù)組追加的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進(jìn)行上傳
  $.ajax({
   url: '/finalize/upload',
   type: 'POST',
   cache: false,
   data: formData,
   processData: false,
   contentType: false
  }).done(function(res) {
   if(res.code == 'ok'){
   //進(jìn)度條設(shè)置
   var value = 0;
   var timer2 = setInterval(function () {
    value ++;
    $("#progress").css('width', value + "%");
    if (value == 120) {
    clearInterval(timer2);
    $("#overlay").hide();
    alert("文件上傳成功!");
    }
   }, 50);
   //刪除對應(yīng)按鈕
   $("#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("請選擇需要上傳的文件!");
 }

 });

感謝各位的閱讀!關(guān)于“JavaScript實現(xiàn)form表單的多文件上傳的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI