layui-upload图片上传组件一次记录

本文详细介绍了layui框架中图片上传组件的使用方法,特别关注了多文件上传时可能遇到的文件队列溢出问题,并提供了相应的解决代码示例。
<!--图片上传组件-->
			<div class="layui-upload">
				<!--触发按钮-->
				<button type="button" class="layui-btn btn-success " id="test2" style="border:none;border-radius: 3px;height: 32px;margin-left: 30px;">资产附图上传</button>
				<blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;border: 5px solid #eee !important;margin-left: 30px;width: 78%;height: 230px;" id="preview">
					预览图:
					<div class="layui-upload-list" id="demo2"></div>
				</blockquote>
			</div>

html代码如上,可详细见官网示例,这里是多文件上传(图片)示例:

容易出问题的地方是文件多次选择,layui的组件回出现文件溢出,就是图片多次选择的累加,注意在恰当时候使用:

for(var temp in files)
						{
							delete files[temp];   //清空文件队列
						}

来清空文件队列!!!

let photoFiles = []; let ossToken = null; let maxCount = 5; let uploadcom = upload.render({ elem: '#importPhoto', multiple: true, auto: false, exts: 'png|jpeg|jpg|gif', size: 1024 * 10, // 限制单张10M number: maxCount, // 动态绑定最大数量 choose: function(obj) { // 清空输入框值(避免重复提交) uploadcom.config.elem.next()[0].value = ''; // 获取用户选择的文件并校验数量 let files = obj.pushFile(); if (Object.keys(files).length > maxCount) { layer.msg(`最多上传 ${maxCount} 个文件!`); // 手动截断超出部分 let validFiles = {}; let count = 0; for (let key in files) { if (count >= maxCount) break; validFiles[key] = files[key]; count++; } photoFiles = validFiles; // 重新预览有效文件 // $('#imgItemInfo').empty(); // 清空旧预览 $('#imgItemInfo') .find('>').not('#importPhoto') // 找到所有直接子元素,排除 #importPhoto .remove(); // 删除其他元素(即预览内容) obj.preview(function(index, file, result) { if (validFiles[index]) { // 仅渲染有效文件 $('#imgItemInfo').append(` <div id="imgDiv-${index}" class="layui-upload-drag-self layui-upload-img-self"> <img src="${result}" alt="${file.name}" width="80px" height="80px"> <a id="${index}" class="handle"><i class="layui-icon icon-myself"> ဆ </i></a> </div> `); // 删除按钮事件 $(`#${index}`).click(function() { $("#imgDiv-" + index).remove(); delete photoFiles[index]; }); // 图片放大事件 $(`#imgDiv-${index} img`).click(function() { $('#modalImage').attr('src', this.src); $('#imageModal').show(); }); } }); } else { // 未超量时的正常预览逻辑 photoFiles = files; obj.preview(function(index, file, result) { $('#imgItemInfo').append(` <div id="imgDiv-${index}" class="layui-upload-drag-self layui-upload-img-self"> <img src="${result}" alt="${file.name}" width="80px" height="80px"> <a id="${index}" class="handle"><i class="layui-icon icon-myself"> ဆ </i></a> </div> `); $(`#${index}`).click(function() { $("#imgDiv-" + index).remove(); delete photoFiles[index]; }); $(`#imgDiv-${index} img`).click(function() { $('#modalImage').attr('src', this.src); $('#imageModal').show(); }); }); } }, // 关闭模态框(修复语法错误) done: function() { $('.close-btn').click(function() { $('#imageModal').hide(); }); } });这个方法有个bug ,当第一次上传文件超过数量限制后,不关闭当前弹窗,删除了几张图片,再次点击上传图片,就毫无反应了
最新发布
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值