layui多图片上传并限制上传的图片数量

本文详细介绍了如何使用JavaScript和jQuery实现多图片上传和删除功能,包括限制上传图片的数量、预览图片、处理图片大小及格式,以及在上传后如何进行图片数据的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        //给图片添加删除
        function mouseChange() {
                $(document).on("mouseenter mouseleave", ".file-iteme", function (event) {
                    if (event.type === "mouseenter") {
                        //鼠标悬浮
                        $(this).children(".info").fadeIn("fast");
                        $(this).children(".handle").fadeIn("fast");
                    } else if (event.type === "mouseleave") {
                        //鼠标离开
                        $(this).children(".info").hide();
                        $(this).children(".handle").hide();
                    }
                });

        }
        mouseChange();

    //json的length  
    function getJsonLength(jsonData){
            var jsonLength = 0;
            for(var item in jsonData){
                jsonLength++;
            }
            return jsonLength;
        }

        //多图片上传
        var ImgList = $('#uploader-list'),uploadListIns =upload.render({
            elem: '#chooseImg',
            url: $("#projectUrl").val()+ '/img/imgUpload.do',
            accept: 'images',
            acceptMime: 'image/jpg,image/png,image/jpeg',
            exts: 'jpg|png|jpeg',
            size: 1024,
            multiple: true,
            auto: true,
            choose: function(obj){
                var files = obj.pushFile(); //将每次选择的文件追加到文件队列
                var len = getJsonLength(files);
                //读取本地文件
                obj.preview(function (index, file, result) {
                    if (parseInt(len)+parseInt(coachPicsArray.length)-count > 6){
                        layer.msg("门店图片不能超过6张");
                        //遍历
                        $.each(files,function(_key){
                            var key = _key;
                            var value = files[_key];
                            if(_key == index)
                            {  //删除
                                delete files[_key];
                            }
                        });
                    }else {
                        var reader = new FileReader();
                        reader.onload = function (e) {
                            var image = new Image();
                            image.onload = function () {
                                var realWidth = image.width;
                                var realHeight = image.height;
                                var tr = $(['<div id="upload-' + index + '" class="file-iteme">' +
                                '<div class="removeIcon handle"> <i class="layui-icon" style="color: white ;margin-right: 40%">&#xe640;</i></div>' +
                                '<img  style="color: white;width: 120px" "showBig(this)" src=' + result + ' id="img-' + index + '">' +
                                '</div>'].join(''));

                                //删除
                                tr.find('.handle').on('click', function () {
                                    $(this).parent().remove();
                                    delete files[index]; //删除对应的文件
                                    var value = $("#clubCoachPics").val().split(",");
                                    var arr = [];
                                    for( var i in value){
                                        if (value[i] != $(this).next().data('value')){
                                            arr.push(value[i]);
                                        }
                                    }
                                    $("#clubCoachPics").val(arr.join(",")) ;

                                });
                                ImgList.append(tr);

                            };
                            image.src = result;
                        };
                        //正式读取文件
                        reader.readAsDataURL(file);
                    }
                });
            },
            before: function (obj) {
                layer.msg('图片上传中...', {
                    icon: 16,
                    shade: 0.01,
                    time: 3000
                })
            },
            done: function (res, index, upload) {
                $("#img-"+ index + "").attr("data-value",res.imgUrl);
                if(res.code == 0){ //上传成功
                    var imgUrl = $("#clubCoachPics").val();
                    if(imgUrl==null||imgUrl==""){
                        $("#clubCoachPics").val(res.imgUrl);
                    }else{
                        $("#clubCoachPics").val(imgUrl+","+res.imgUrl);
                    }
                    delete files[index]; //删除文件队列已经上传成功的文件
                    return;
                };

            }
        });

之前的代码时最初的版本,在公司原有的代码基础上修改的,时间久远,很多参数我也忘记了,更新一下后来的版本。

        //给图片添加删除
        function mouseChange() {
                $(document).on("mouseenter mouseleave", ".file-iteme", function (event) {
                    if (event.type === "mouseenter") {
                        //鼠标悬浮
                        $(this).children(".info").fadeIn("fast");
                        $(this).children(".handle").fadeIn("fast");
                    } else if (event.type === "mouseleave") {
                        //鼠标离开
                        $(this).children(".info").hide();
                        $(this).children(".handle").hide();
                    }
                });

        }
        mouseChange();

        //图片删除事件
        $(document).on("click", ".file-iteme .handle", function(event){
            var currentImgUrl = $(this).next().data('value');
            var values = $("#clubCoachPics").val().split(",");
            var imageIndex = $(this).next().attr('index');
            var that = $(this);
            layer.confirm('您确定要删除这张图片么?', {
                btn: ['确认','不要'] //按钮
            }, function(index){
                $.ajax({
                    type:"post",
                    url:$("#projectUrl").val()+"/clubInfo/deleteClubCoachPics.do",
                    data:"id="+$("#id").val()+"&str="+currentImgUrl,
                    success:function(res){
                        if(res.code==0){
                            var arr = [];
                            for( var i in values){
                                if (values[i] != currentImgUrl){
                                    arr.push(values[i]);
                                }
                            }
                            $("#clubCoachPics").val(arr.join(",")) ;
                            if(imageIndex != null && imageIndex != ''){
                                delete files[imageIndex]; //删除对应的文件
                            }
                            that.parent().remove();
                            layer.close(index);
                            layer.msg('删除成功');
                        }else{
                            layer.msg(res.msg);
                        }
                    }
                })
            })
        });


        var index;
        //多图片上传
        var ImgList = $('#uploader-list'),uploadListIns =upload.render({
            elem: '#chooseImg',
            url: $("#projectUrl").val()+ '/img/imgUpload.do',
            accept: 'images',
            acceptMime: 'image/jpg,image/png,image/jpeg',
            exts: 'jpg|png|jpeg',
            size: 1024,
            multiple: true,
            auto: true,
            number:6,
            before: function(obj){
                files = obj.pushFile(); //将每次选择的文件追加到文件队列
                var fileLength = Object.keys(files).length;
                var early = $("#clubCoachPics").val();
                if (early == ""|| early == null){
                    early = 0;
                }else {
                    early =early .split(",").length
                }
                var imgLength = early + fileLength;
                if(imgLength > 6) {
                    layer.msg('上传图片数量不能超过6张', {
                        icon: 2,
                        time: 1500
                    });
                    //遍历
                    obj.preview(function (index, file, result) {
                        $.each(files, function (_key) {
                            var key = _key;
                            var value = files[_key];
                            if (_key == index) {  //删除
                                delete files[_key];
                            }
                        });
                    });
                    return false;
                }else{
                    index = layer.msg('正在上传,请稍候', {
                        icon: 16,
                        shade: 0.01,
                        time: 150000*10
                    });
                    //读取本地文件
                    obj.preview(function (index, file, result) {
                        var reader = new FileReader();
                        reader.onload = function (e) {
                            var image = new Image();
                            image.onload = function () {
                                var realWidth = image.width;
                                var realHeight = image.height;
                                var tr = $(['<div id="upload-' + index + '" class="file-iteme imgSrc">' +
                                '<div class="removeIcon handle"> <i class="layui-icon" style="color: white">&#xe640;</i></div>' +
                                '<img style="color: white;width: 100px" "showBig(this)" src=' + result + ' id="img-' + index + '" index="' + index + '">' +
                                '</div>'].join(''));
                                ImgList.append(tr);
                            };
                            image.src = result;
                        };
                        //正式读取文件
                        reader.readAsDataURL(file);
                    });
                }
            },
            done: function (res, index, upload) {
                $("#img-"+ index + "").attr("data-value",res.imgUrl);
                if(res.code == 0){ //上传成功
                    layer.msg("上传成功",{
                        id:1
                    });
                    var imgUrl = $("#clubCoachPics").val();
                    if(imgUrl==null||imgUrl==""){
                        $("#clubCoachPics").val(res.imgUrl);
                    }else{
                        $("#clubCoachPics").val(imgUrl+","+res.imgUrl);
                    }
                }else{
                    $('#upload-'+ index).remove();
                    layer.msg('上传失败,请重新上传');
                }
                delete files[index]; //删除文件队列已经上传成功的文件
                return;
            },
            error: function(index, upload){
                $('#upload-'+ index).remove();
                delete files[index];
                layer.msg('上传失败,请重新上传');
            }
        });

 

### Layui图片上传功能实现 Layui 是一款基于 JavaScript 的前端 UI 框架,提供了丰富的模块化组件,其中 `upload` 模块用于处理文件上传功能。以下是关于如何在 Layui 中实现图片上传功能的详细介绍。 #### 1. 基本配置与初始化 通过引入 Layui 的核心文件加载 `upload` 模块来完成基本配置。以下是一个简单的 HTML 和 JavaScript 结构: ```html <!-- 引入 Layui CSS --> <link rel="stylesheet" href="/path/to/layui/css/layui.css"> <button type="button" class="layui-btn" id="testUpload">上传图片</button> <div id="preview"></div> <script src="/path/to/layui/layui.js"></script> <script> layui.use(['upload'], function() { var upload = layui.upload; // 执行实例 var uploadInst = upload.render({ elem: '#testUpload', // 绑定元素 url: '/api/upload', // 接收上传文件的服务端接口地址 accept: 'images', // 只允许上传图片 multiple: true, // 支持多图上传 before: function(obj) { // 文件上传前触发 layer.load(); // 显示加载动画 }, done: function(res) { // 文件上传完毕后的回调函数 layer.closeAll('loading'); // 关闭加载动画 if (res.status === 0) { // 判断返回状态码是否成功 console.log(res); // 动态生成预览图片 var imgElem = document.createElement('img'); imgElem.src = res.data.url; imgElem.style.width = '100px'; imgElem.style.height = 'auto'; document.getElementById('preview').appendChild(imgElem); } else { layer.msg('上传失败!'); } }, error: function() { // 请求异常时触发 layer.msg('请求异常,请稍后再试!'); } }); }); </script> ``` 上述代码实现了基础的图片上传功能,动态展示了上传成功的图片[^1]。 --- #### 2. 自定义参数传递 如果需要向服务端额外传递一些自定义数据(如用户 ID 或其他字段),可以通过设置 `data` 参数实现: ```javascript var uploadInst = upload.render({ ... data: { userId: 123 }, // 向服务端发送附加参数 ... }); ``` 此方法会在上传过程中将指定的数据一提交给服务端[^2]。 --- #### 3. 进度条监控 为了提升用户体验,可以在上传过程中显示进度条。这需要借助 Layui 提供的事件钩子 `progress` 来捕获上传进度变化: ```javascript var uploadInst = upload.render({ ... progress: function(n, elem) { // n 表示当前进度百分比 element.progress('demo', n + '%'); // 更新进度条 if (n === 100) { layer.msg('上传已完成!'); } }, ... }); ``` 在此基础上,还需要配合 Layui 的 `element` 模块创建一个可视化的进度条容器[^3]。 --- #### 4. 文件验证与限制 为了避免非法文件被上传至服务器,可通过客户端进行初步校验。例如,限定文件类型、大小以及最大上传数量等: ```javascript var uploadInst = upload.render({ ... size: 1024 * 5, // 单位 KB,默认不超过 5MB exts: 'jpg|png|gif|bmp', // 允许上传的扩展名 number: 9, // 最大上传数量为 9 张 auto: false, // 不自动上传 bindAction: '#confirmBtn', // 点击确认按钮才真正上传 choose: function(obj) { // 当选择文件后触发 obj.preview(function(index, file, result) { console.log(file.name); // 输出文件名 }); }, ... }); ``` 以上代码片段设置了多种约束条件,确保只有符合条件的文件才能进入后续流程。 --- #### 5. 删除已选中的文件 对于已经选定但尚未正式提交的文件,可以提供删除操作的功能。具体逻辑如下所示: ```javascript choose: function(obj) { var files = this.files = obj.pushFile(); // 遍历得到的文件列表项 $.each(files, function(key, value){ var tr = $(['<tr id="' + key +'">', '<td>' + value.name + '</td>', '<td><button class="layui-btn layui-btn-xs del-file">删除</button></td>' ].join('')); $('table tbody').append(tr); // 添加删除事件监听器 $('.del-file').on('click', function(){ delete files[key]; $('#' + key).remove(); }); }); } ``` 这段脚本能够帮助用户管理待上传的资源集合。 --- #### 总结 综上所述,利用 Layui 的强大工具集完全可以构建一套完整的图片上传解决方案,既满足业务需求又兼顾良好的交互体验。除了本文提到的内容外,还可以进一步探索更多高级特性以适应复杂场景下的挑战。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值