您的位置:

使用LayUI实现图片上传

一、LayUI介绍

LayUI是一款开源的前端UI框架,是由贤心(张鑫旭)开发和维护的,它包含丰富的HTML元素和CSS样式,可以快速构建响应式布局的Web页面。在LayUI中,上传文件是一个非常重要的功能,当我们需要上传大量的图片或文件时,就可以使用LayUI提供的上传组件,它可以方便的实现文件选择、上传、进度提示等功能。

二、LayUI文件上传组件

LayUI的文件上传组件使用非常方便,只需要在HTML页面中引入相关的js和css文件,然后使用LayUI提供的upload组件就可以了。例如,下面是一个最简单的LayUI文件上传示例:

    layui.use('upload', function(){
        var upload = layui.upload;
        //执行实例
        var uploadInst = upload.render({
            elem: '#test1', //绑定元素
            url: '/upload/', //上传接口
            done: function(res){
                //上传完毕回调
                console.log(res);
            },
            error: function(){
                //请求异常回调
            }
        });
    });

在这个示例中,我们首先需要在HTML页面中引入LayUI相关的js和css文件。然后使用layui.use方法加载upload组件,创建upload实例,然后通过实例的render方法将upload组件绑定到页面上的一个元素中(这个元素可以是任意的HTML元素,比如一个按钮)。在render方法中,我们需要指定上传接口(即服务器端处理上传文件请求的URL),并定义上传成功和上传失败的回调函数。

三、上传前预览图片

现在,我们需要对文件上传功能进行一些扩展,我们希望用户在上传文件之前,可以预览要上传的图片。这个功能在LayUI中也非常容易实现,只需要在选择文件后,将要上传的文件显示在页面上即可。以下是代码示例:

    layui.use('upload', function(){
        var upload = layui.upload;
        var $ = layui.jquery;

        //普通图片上传
        var uploadInst = upload.render({
            elem: '#test1',
            url: '/upload/',
            auto: false, //选择文件后不自动上传
            //设置最大文件大小3MB
            size: 3072,
            //在文件被选择后触发回调
            choose: function(obj){
                //预读本地文件,如果是图片,显示图片预览
                obj.preview(function(index, file, result){
                    $('#upload_img').attr('src', result); //将图片路径赋值给img标签
                });
            },
            //上传之前调用的函数
            before: function(obj){
                layer.msg('正在上传,请稍后...', {
                    icon: 16,
                    shade: 0.01,
                    time: 0
                });
            },
            done: function(res){
                //上传完毕回调
                console.log(res);
                layer.closeAll('loading'); //关闭loading
            },
            error: function(){
                //请求异常回调
                layer.closeAll('loading');
            }
        });
    });

在这个示例中,在选择文件后,我们可以通过obj.preview方法,将要上传的文件显示在页面上。这个方法接受3个参数,index表示文件的索引,file表示选择的文件对象,result表示读取到的文件数据。我们将result赋值给一个img标签的src属性,这样就可以显示出要上传的图片了。同时,我们也设置了上传文件的最大大小3MB,以及上传前调用的函数,该函数会对上传文件进行一些处理,比如显示loading动画等。

四、显示上传进度

除了预览图片之外,我们还需要在上传文件时,显示上传进度的提示。这个功能也可以非常容易地实现,在render方法中,我们只需要加入一个progress属性即可。以下是代码示例:

    layui.use('upload', function(){
        var upload = layui.upload;
        var $ = layui.jquery;

        //普通图片上传
        var uploadInst = upload.render({
            elem: '#test1',
            url: '/upload/',
            auto: false,
            size: 3072,
            progress: function(n, elem){
                //显示上传进度
                element.progress('myprogress', n + '%');
            },
            choose: function(obj){
                obj.preview(function(index, file, result){
                    $('#upload_img').attr('src', result);
                });
            },
            before: function(obj){
                layer.msg('正在上传,请稍后...', {
                    icon: 16,
                    shade: 0.01,
                    time: 0
                });
            },
            done: function(res){
                console.log(res);
                layer.closeAll('loading');
            },
            error: function(){
                layer.closeAll('loading');
            }
        });
    });

在这个示例中,我们加入了一个progress属性,该属性绑定了一个函数,用于显示上传进度。在该函数中,我们通过LayUI提供的element.progress方法,动态地显示上传进度条。其中,myprogress是一个自定义的元素ID,表示显示进度条的位置。同时,我们还需要在before函数中显示loading动画,在done和error函数中关闭loading动画。

五、总结

通过上面的介绍,我们可以看到,LayUI提供的上传组件非常方便,可以轻松实现文件上传功能。在预览图片、上传进度等方面,LayUI也提供了很好的支持,开发者可以根据自己的需求进行选择和定制。如果你正在开发Web应用程序,需要实现文件上传功能,那么LayUI绝对是一个不错的选择。