layui 上传插件 带预览 非自动上传功能的实例(非常实用)

这里提供一个完整的实例,使用layui上传插件,其带有预览功能,但是不支持自动上传。

操作步骤

步骤一:引入layui文件

这里以layui的cdn方式为例:

<link rel="stylesheet" href="//cdn.bootcss.com/layui/2.5.4/css/layui.min.css">
<script src="//cdn.bootcss.com/layui/2.5.4/layui.min.js"></script>

步骤二:添加html元素

在html中添加一个上传的元素:

<div class="layui-upload-list">
  <table class="layui-table">
    <thead>
      <tr>
        <th>文件名</th>
        <th>大小</th>
        <th>状态</th>
        <th>操作</th>
      </tr>
    </thead>
    <tbody id="demoList"></tbody>
  </table>
</div>
<button type="button" class="layui-btn layui-btn-normal" id="testList">选择文件</button>

步骤三:初始化上传组件

这里我们初始化上传组件,设置一些参数,包括选择文件的按钮、文件列表、是否多选、是否自动上传、上传进度回调、上传完成回调、上传异常回调等:

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

  //执行实例
  var uploadInst = upload.render({
    elem: '#testList' //绑定元素
    ,url: '/upload/' //上传接口
    ,accept: 'file' //文件类型
    ,multiple: true //多文件上传
    ,auto: false //不支持自动上传
    ,bindAction: '#testListAction' //同时绑定上传按钮
    ,choose: function(obj){ //选择文件后回调
      var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列

      //预读本地文件,防止跨域上传文件时使用
      obj.preview(function(index, file, result){
        console.log(index); //得到文件索引
        console.log(file); //得到文件对象
        console.log(result); //得到文件base64编码,比如图片
      });
    }
    ,before: function(obj){ //上传前回调
      layer.msg('正在上传,请稍后...', {
        icon: 16
        ,shade: 0.01
      })
    }
    ,done: function(res, index, upload){ //上传完毕后回调
      layer.closeAll('loading');

      if(res.code == 0){ //上传成功
        var demoText = $('#demoText');
        demoText.html('<span style="color: #6caa37;">上传成功</span>');
        return layer.msg('上传成功');
      }

      //上传失败
      layer.msg(res.msg);
    }
    ,error: function(index, upload){ //上传异常回调
      layer.closeAll('loading');
      console.log(index);
      console.log(upload);
      layer.msg('上传失败,请稍后再试');
    }
  });
});

示例说明1:大小限制

如果我们需要限制文件上传的最大尺寸,只需要在选择文件回调中添加限制即可:

,choose: function(obj){ //选择文件后回调
  obj.preview(function(index, file, result){
    //限制文件大小
    if(file.size > 5*1024*1024){ //5MB
      layer.msg('文件大小不能超过5MB');
      return;
    }

    //处理预览
    var tr = $(['<tr id="upload-'+ index +'">'
      ,'<td>'+ file.name +'</td>'
      ,'<td>'+ (file.size/1024).toFixed(1) +'KB</td>'
      ,'<td>等待上传</td>'
      ,'<td>'
        ,'<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
        ,'<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'
      ,'</td>'
    ,'</tr>'].join(''));

    //绑定删除按钮事件
    tr.find('.demo-delete').on('click', function(){
      delete files[index]; //删除文件队列已经上传的文件

      tr.remove(); //删除列表中对应的文件DOM

      uploadInst.config.elem.next()[0].value = ''; //清空input file值,以免删除后出现同名文件不可选

      layer.msg('删除成功');
    });

    demoListView.append(tr);
  });
}

在代码中,我们在选择文件回调方法中添加了文件大小限制,如果超过了5MB,将弹出提示。

示例说明2:自定义文件名

如果我们需要自定义文件名,只需要在上传接口中获取文件名并调整:

,done: function(res, index, upload){ //上传完毕后回调
  if(res.code == 0){ //上传成功
    var demoText = $('#demoText');
    demoText.html('<span style="color: #6caa37;">上传成功</span>');
    return layer.msg('上传成功');
  }

  //上传失败
  layer.msg(res.msg);

  //修改文件名
  uploadInst.config.elem.next()[0].value = res.filename;
}

在上传完成回调方法中,我们先判断上传是否成功,然后根据实际情况修改文件名即可。

总结

以上就是一个完整的layui上传组件的示例,包含了文件列表、文件类型限制、文件大小限制、上传前回调、上传完成回调、上传异常回调等。需要注意的是,这个示例不支持自动上传,如果需要自动上传,则需要在初始化组件的时候将auto参数设置为true。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:layui 上传插件 带预览 非自动上传功能的实例(非常实用) - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++ 算法精讲之贪心算法

    C++ 算法精讲之贪心算法攻略 什么是贪心算法 贪心算法是指在求解问题时,先做出在当前看来最优的选择,而无需考虑到未来的情况。贪心算法的应用范围很广泛,常应用于最优化问题中。 贪心算法的基本思想 在贪心算法中,每次选择的步骤都是基于当前状态下的最优选择,也就是选取局部最优解,而不考虑整体最优解的条件,在获得当前最优解的情况下逐步推进,最终获得整体最优解。 贪…

    C 2023年5月22日
    00
  • asp.net中各种类型的JSON格式化

    请看下面的解答。 ASP.NET中各种类型的JSON格式化:完整攻略 在ASP.NET开发中,经常需要将数据格式化为JSON格式进行传输。下面介绍ASP.NET中各种类型的JSON格式化方法。 1. DataTable DataTable是ASP.NET中最常用的数据集合类型之一,如果要将DataTable格式化为JSON字符串,可以使用Newtonsoft…

    C 2023年5月23日
    00
  • python 接口返回的json字符串实例

    完整攻略: 在使用Python编写Web接口的时候,常常需要返回数据,而json是最常用的一种数据格式。可以使用Python自带的json包来处理json数据。Python可以将json字符串转换成对象,也可以将对象转换成json格式字符串。 下面简单讲解一下Python中如何处理json数据。 将Python的字典转换成json字符串 使用Python自带…

    C 2023年5月23日
    00
  • 怎么解决应用程序发生异常 未知的软件异常 (0xc0000409),位置为0x00409b14的问题

    解决应用程序发生异常未知的软件异常(0xc0000409)是一个比较常见的问题,下面详细讲解解决这个问题的完整攻略。 问题原因分析 应用程序发生异常未知的软件异常(0xc0000409)是由于应用程序所调用的未知的软件异常导致的。这个异常通常是由于应用程序错误、病毒或者不兼容的驱动程序引起的。 解决方案 方案一:升级应用程序 如果出现了应用程序发生异常未知的…

    C 2023年5月23日
    00
  • C++语言基础 命名空间

    C++是一门支持命名空间的语言,命名空间是C++中避免命名冲突的一个重要方式。我们可以通过使用命名空间,把定义在不同范围内的标识符分开,从而保证程序中的标识符不会冲突。 在C++中,命名空间是用关键字“namespace”来定义,如下所示: namespace MyNamespace { // 声明和定义各种变量、函数、类等成员 } 这里的“MyNamesp…

    C 2023年5月23日
    00
  • 求斐波那契(Fibonacci)数列通项的七种实现方法

    求斐波那契数列通项的七种实现方法 方法一:递归 斐波那契数列的递推公式为:F(n) = F(n-1) + F(n-2),为了求得第 n 个斐波那契数,可以通过递归求解,但是递归实现时间复杂度为 O(2^n),随着 n 的增大,运行效率会非常低下。 def fib_recursion(n): if n <= 1: return n return fib_…

    C 2023年5月22日
    00
  • LUNC币燃烧机制是什么?LUNC币燃烧机制介绍

    LUNC币燃烧机制介绍 什么是燃烧机制? 燃烧机制是一种通行于数字货币领域的一种安全机制,该机制旨在通过不断的销毁代币来控制流通数量,从而稳定代币价格。 LUNC币燃烧机制的作用 LUNC币是一个基于以太坊构建的代币,它的燃烧机制主要有两个作用: 控制代币的流通量,避免出现通货膨胀,使代币价格稳定; 促进代币的持有者积极参与生态建设,以获得更多的钱财奖励。 …

    C 2023年5月24日
    00
  • C 标准库 math.h

    首先我们来介绍一下 C 标准库 math.h。 math.h 是 C 标准库的一部分,提供了数学计算相关的函数。使用时需要在程序中包含 math.h 头文件。以下是部分常用的 math.h 函数: 基本数学函数 fabs(x):返回 x 的绝对值 sqrt(x):返回 x 的平方根 pow(x, y):返回 x 的 y 次幂 exp(x):返回 e 的 x …

    C 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部