在做后台管理的時候,遇到這樣一個需求,實現多張圖片上傳並按選中的順序顯示。PS:圖片上傳的時候是即時上傳到服務器,后台返回圖片在服務器上的地址,在最后點擊提交按鈕的時候,把地址傳給后端寫入數據庫即可。
1、input標簽,accept='image/*'上傳圖片格式只要是image就行,multiple實現文件可以多選
<input type="file" id="add-pic2" accept="image/*" multiple>
2、監聽選中事件
$("#add-pic2").on("change", function () { // if (pic_banner.length >= 10 || pic_banner.length + this.files.length >= 10) { // return swal("最多10張圖片"); // } //遞歸上傳 var files = this.files files.length && diguiAjax(this.files, 0, this.files.length, function (res, i) { var obj = { pic: res.data.list }; pic_banner.push(obj); var bannerHtml = ""; bannerHtml = `<div class="pic-wrap pull-left"><span class="closeX" data-index="${res.data.list}">x</span><img src="${res.data.list}" alt=""></div>`; $(".banner-wrap").append(bannerHtml); if (i >= files.length) { document.getElementById('add-pic2').value = null } }) }); //遞歸上傳banner圖片 function diguiAjax(files, j, length, cb) { var ele = files[j]; //壓縮圖片 lrz壓縮圖片 lrz(ele).then(function (rst) { $post({ url: api_www + "/upload_img/uploadImg", data: { token: token, img: rst.base64, is: 1 }, callback: function (res) { if (res.code == 1) { cb(res, j) if (++j < length) { diguiAjax(files, j, length, cb) } } } }); }) }
附:如果選擇圖片先保存在本地,不上傳,點擊提交按鈕統一上傳,核心代碼如下,
imgObjPreview1是要顯示圖片的div
imgObjPreview1.src = window.URL.createObjectURL(this.files[0]);