layui上传文件时如何加loading效果

这篇博客详细介绍了在layui框架中如何为文件上传功能添加loading加载效果。通过使用layui的layer模块,在文件上传前开启加载层,并自定义加载层的样式,如背景颜色和透明度。当文件上传成功或失败时,适时关闭加载层,提供良好的用户体验。

layui上传文件时如何加loading效果

//文件上传
    layui.use('upload', function () {
        //执行实例
        var uploadInst = upload.render({
            elem: '#iconUpload',  //绑定元素
            accept: 'file',
            url: 'https://it.xxxx.cn:xxxx/file/upload',  //上传接口
            before: function () {
            //开始加载效果
                layui.use('layer', function () {
                    layui.layer.load();
                    //console.log(Lodingindex) opacity
                    $(".layui-layer-shade").css('background', '#000000')
                    $(".layui-layer-shade").css('opacity', '0.2')
                    $(".layui-layer-shade").click(function (event) {
                        event.stopPropagation();
                    })
                })
            },
            done: function (res) {
                if (res[0] !== undefined || res[0] != null || res[0] != "") {
                    let fileLocation = "https://it.jisu8.cn:9999/dfile/" + res[0].sname;
                    $("#download").attr('placeholder', fileLocation);
                    $("#download").val(fileLocation);
                    layer.msg('上传成功');
                }
                //上传成功结束加载效果
                layui.use('layer', function () {
                    layui.layer.closeAll();
                    setTimeout(function () {
                        layui.layer.closeAll();
                    }, 2000);
                });
                form.render();
            }
            , error: function () {
                alert("文件上传失败");
            }
        });
    });
Layui带参数上传文件有多种实现方式,以下为你详细介绍: ### 普通图片上传并带参数 可使用`upload.render`方法,在`before`回调函数中设置要传递的参数。示例代码如下: ```javascript layui.use('upload', function () { var $ = layui.jquery, upload = layui.upload; // 普通图片上传 var uploadInst = upload.render({ elem: '#avatar', url: '{$webname}/personal/uploadimg', accept: 'images', auto: true, before: function (obj) { this.data = { 'id': '445' }; // 预读本地文件示例,不支持ie8 obj.preview(function (index, file, result) { $('#img').attr('src', result); // 图片链接(base64) }); }, done: function (res) { if (res.code == 0) { layer.msg(res.msg); } else { layer.msg(res.msg); } } }); }); ``` 在上述代码里,于`before`回调函数中设置了`data`属性,传递了参数`id`,其值为`445` [^1]。 ### 先选文件上传并带参数 借助`upload.render`方法,把`auto`属性设为`false`,实现先选文件上传的功能,同样在`before`回调函数中设置要传递的参数。示例代码如下: ```html <div class="layui-upload"> <button type="button" class="btn btn-primary layui-btn-normal" id="test8">选择文件</button> <input type="hidden" id="test9" value="开始上传"> <input type="hidden" id="id"> </div> <link rel="stylesheet" href="/js/plugins/layui/css/layui.css" media="all"> <script type="text/javascript" src="/js/plugins/layui/layui.all.js"></script> <script> layui.use('upload', function () { var $ = layui.jquery, upload = layui.upload; // 选完文件后不自动上传 upload.render({ elem: '#test8', url: '/seal/contract/upload', auto: false, accept: "file", size: 50 * 1024, bindAction: '#test9', before: function (obj) { layer.load(); // 上传loading this.data = { 'id': $("#id").val() }; }, done: function (res) { closePage(res); // console.log(res); } }); }); </script> ``` 此代码中,在`before`回调函数里设置了`data`属性,传递了参数`id`,其值从`id`为`id`的输入框获取 [^2]。 ### 上传文件带参数到C# webapi 在`before`回调函数中设置要传递的多个参数。示例代码如下: ```javascript let uploadInst = upload.render({ elem: '#btn_file', // 绑定元素 url: ApiUrl + 'Query/upload/', // 上传接口 size: '0', accept: 'file', // 支持所有格式的文件上传 before: function (obj) { this.data = { 'param1': isLeaf, 'param2': upParentId, 'param3': upId, 'param4': upIndex }; // 关键代码 obj.preview(function (index, file, result) { console.log('上传文件尺寸:', file.size); }); let l = layer.msg('导入中,请稍候', { icon: 16, time: false, shade: 0.8 }); }, done: function (res) { // 上传完毕回调 console.log('res', res); }, error: function (ex) { // 请求异常回调 console.log('ex', ex); } }); ``` 上述代码在`before`回调函数中设置了`data`属性,传递了4个参数`param1`、`param2`、`param3`和`param4` [^3]。 ### springboot+layui实现带进度条带参数上传 定义一个监听器来监听上传文件的相关信息,如总大小、已读取的文件大小等。示例代码如下: ```java package com.yuxiao.springboot.upload.listener; import com.yuxiao.springboot.upload.entity.ProgressEntity; import org.apache.commons.fileupload.ProgressListener; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; @Component public class UploadProgressListener implements ProgressListener { private HttpSession session; public void setSession(HttpSession session) { this.session = session; ProgressEntity pe = new ProgressEntity(); session.setAttribute("uploadStatus", pe); } /** * 设置当前已读取文件的进度 * @param readBytes 已读的文件大小(单位byte) * @param allBytes 文件总大小(单位byte) * @param index 正在读取的文件序列 */ @Override public void update(long readBytes, long allBytes, int index) { ProgressEntity pe = (ProgressEntity) session.getAttribute("uploadStatus"); pe.setReadBytes(readBytes); pe.setAllBytes(allBytes); pe.setCurrentIndex(index); } } ``` 此代码定义了一个`UploadProgressListener`类,实现了`ProgressListener`接口,用于监听上传文件的进度信息 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值