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日

相关文章

  • 使用批处理文件异地备份数据库(最近几天的数据)

    下面是使用批处理文件异地备份数据库(最近几天的数据)的完整攻略: 第一步:编写批处理文件 打开文本编辑器,新建一个批处理文件,后缀名为“.bat”。比如,我们可以用“backup.bat”来命名这个文件。 在批处理文件中输入以下代码: @echo off REM 配置数据库备份参数 set backup_path=D:\Backup\Database set…

    C 2023年5月22日
    00
  • PHP实现数组转JSon和JSon转数组的方法示例

    下面是详细的“PHP实现数组转JSon和JSon转数组的方法示例”的攻略: 一、数组转JSON 1. json_encode() 函数 json_encode()函数是PHP中将一个数组转换为JSON格式字符串的标准方法。 语法:string json_encode ( mixed $value [, int $options = 0 [, int $dep…

    C 2023年5月23日
    00
  • 一些C语言中字符串的算法问题解决实例小结

    我来详细讲解“一些C语言中字符串的算法问题解决实例小结”的完整攻略。攻略中包含以下内容: 引言 在C语言中,字符串是一种常见的数据类型,其操纵涉及到各种算法问题,因此学习一些C语言字符串的算法问题解决实例是很必要的。 字符串的定义和表示方法 字符串是由字符组成的一串数据,可以使用字符数组或指针来定义和表示。字符数组的定义方式如下: c char str[20…

    C 2023年5月22日
    00
  • python非单一.py文件用Pyinstaller打包发布成exe

    下面是“Python非单一.py文件用Pyinstaller打包发布成exe”的完整攻略。 什么是Pyinstaller PyInstaller是一个Python应用程序的打包工具。它可以将Python程序打包成单个可执行文件,这让你可以方便地将Python程序发布给其他人,而不需要他们安装Python环境。 Pyinstaller的安装 在安装Pyinst…

    C 2023年5月22日
    00
  • C语言如何实现一些算法或者函数你知道吗

    针对“C语言如何实现一些算法或者函数”这个问题,我可以提供以下攻略: 一、理解算法和函数的概念 在开始实现算法和函数之前,需要先理解算法和函数的概念。 算法:算法是指解决问题的方法和步骤。在编程中,算法是一组逐步执行的指令,用于解决特定问题。 函数:函数是一段封装了特定功能的代码块,可重复使用。在C语言中,函数必须先被声明,然后才能被调用。 二、挑选算法或函…

    C 2023年5月23日
    00
  • 基于C语言实现点餐系统

    基于C语言实现点餐系统攻略 1. 设计思路 点餐系统是一个有交互性、实用性强的软件应用,主要包括客户端和服务端两部分。客户端负责展示菜单、实现点餐和确认订单等功能,而服务端则负责接收和处理客户端发送的请求,并给出响应。 基于C语言实现点餐系统的主要步骤包括: 定义数据结构,存储菜单和订单相关信息 “`// 定义菜单项结构体typedef struct { …

    C 2023年5月23日
    00
  • C语言实现顺序循环队列实例

    C语言实现顺序循环队列实例 什么是顺序循环队列? 在计算机科学中,队列(Queue)是一个数据结构,用于存储按顺序排列的元素,具有FIFO(First In First Out)的特点。顺序循环队列是一种基于数组实现的队列,在队列尾部加入元素,在队列头部删除元素。 顺序循环队列的实现 数据结构定义 顺序循环队列的核心是数据结构的定义,它包含以下信息: 队列最…

    C 2023年5月24日
    00
  • python3 实现的对象与json相互转换操作示例

    下面我将详细讲解 “Python3 实现的对象与 JSON 相互转换操作示例”的完整攻略。 概述 在 Python 中,我们经常需要将Python对象转换成 JSON 格式,或者将 JSON 格式的数据转换成 Python 对象。这两个操作非常常见,而且在网络数据传输、数据存储等应用中也非常有用。 Python 中提供了两个模块进行 JSON 格式和 Pyt…

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