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日

相关文章

  • docker 文件存放路径, 修改端口映射操作方式

    下面给出 Docker 文件存放路径和修改端口映射操作方式的完整攻略。 Docker 文件存放路径 Docker 容器的数据和配置会存储在宿主机的某个目录中,称为 Docker 数据目录,也就是容器数据的本地持久化存储路径。 查看容器数据目录 可以通过以下指令查看容器数据目录: docker inspect <容器名称或ID> | grep -i…

    C 2023年5月23日
    00
  • C++中文件操作基础详解

    C++中文件操作基础详解 本文将详细讲解C++中文件操作的基础知识,包括文件打开、读取、写入等操作,以及相关函数和代码示例。 文件打开和关闭 C++中的文件操作需要打开文件才能读写文件内容。文件打开需要使用fstream库中的函数open(),它可以接收文件名、文件打开方式等参数,具体参数如下: void open(const char* filename,…

    C 2023年5月22日
    00
  • 浅谈JSON中stringify 函数、toJosn函数和parse函数

    JSON 是一种文本格式,主要用来作为前后端数据交互的标准格式。在使用 JSON 的时候,经常需要使用 JSON 的三个核心函数:JSON.stringify()、JSON.parse()、toJSON(),这三个函数分别用于将 JavaScript 数据转换为 JSON 字符串或者反向转换,或自定义数据格式。 JSON.stringify() JSON.s…

    C 2023年5月23日
    00
  • C语言实现万年历小功能

    C语言实现万年历小功能攻略 目录 前言 实现流程 示例说明 总结 前言 万年历是一种常用的日历显示方式,通过C语言实现其小功能,可以提升我们的编程技能。本文将详细讲解如何实现C语言实现万年历小功能的攻略。 实现流程 步骤1:获取输入的日期 可以通过以下代码来获取用户输入的日期: int year, month, day; printf("请输入日期…

    C 2023年5月23日
    00
  • C语言归排与计排深度理解

    C语言归排与计排深度理解 什么是排序算法? 排序算法是计算机程序设计中最常见的问题之一。排序算法是一种将输入元素按特定顺序排列的算法。排序算法分为内部排序和外部排序:- 对于内存(内部)排序,其输入和输出均存储在计算机内存中。- 对于外存(外部)排序,其输入或输出涉及到显式的输入/输出操作,通常通过磁带、磁盘或因特网进行数据传输和存储。 本篇文档主要介绍内部…

    C 2023年5月23日
    00
  • C语言实现动态顺序表的实现代码

    让我来为大家详细讲解一下如何使用C语言实现动态顺序表的实现代码。 1. 动态顺序表的概述 动态顺序表是一种线性表,它基于数组实现。动态顺序表可以自动扩充或缩小其容量以存储数据。动态顺序表中元素的位置是按照它们在数组中的位置来确定的。它们在内存中是连续存储的,因此它们可以通过下标快速访问。 2. 动态顺序表的实现 我们使用C语言的方法来实现动态顺序表。首先,我…

    C 2023年5月23日
    00
  • C程序 检查两个矩阵是否相等

    下面我将详细讲解如何使用“C程序 检查两个矩阵是否相等”。 什么是“C程序 检查两个矩阵是否相等” “C程序 检查两个矩阵是否相等”是一段使用C语言编写的程序,可以用来检查两个矩阵是否相等。它可以判断两个矩阵是否具有相同的行列数,并逐一比较矩阵中的每一个元素,以判断两个矩阵是否相等。 如何使用“C程序 检查两个矩阵是否相等” 要使用“C程序 检查两个矩阵是否…

    C 2023年5月9日
    00
  • C++日期和时间编程小结

    C++日期和时间编程小结完整攻略 本文将介绍使用C++编程语言来获取和处理日期和时间的相关技巧和知识。首先,我们需要了解C++标准库中关于日期和时间的头文件<chrono>和<ctime>。 头文件介绍 头文件\ 在C++11标准中,引入了一个新的日期和时间库<chrono>,它提供了丰富的日期和时间操作工具。通过<…

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