当前位置: 首页 > news >正文

【layui】多文件上传组件实现

插件预览效果:

需要引入layui的脚本文件layui.js和样式文件layui.css

html代码:

<div class="layui-input-block"><div class="layui-upload-list"><table class="layui-table"><colgroup><col style="min-width: 100px;"><col width="150"><col width="260"><col width="150"></colgroup><thead><tr><th>文件名</th><th>大小</th><th>上传进度</th><th>操作</th></tr></thead><tbody id="ID-upload-demo-files-list"></tbody></table></div><button type="button" class="layui-btn layui-btn-normal" id="upload">选择多文件</button><button type="button" class="layui-btn" id="ID-upload-demo-files-action">开始上传</button>
</div>

脚本代码:

//初始化组件
var uploadListIns = upload.render({elem: '#upload',elemList: $('#ID-upload-demo-files-list'), // 列表元素对象url: '/FileManage/Uploadfile/Upload', // 实际使用时改成您自己的上传接口即可。accept: 'file',multiple: true,number: 10,auto: false,bindAction: '#ID-upload-demo-files-action',data: { filetype: 3 },//接口参数choose: function (obj) {var that = this;var files = this.files = obj.pushFile(); // 将每次选择的文件追加到文件队列console.log('obj.pushFile()', obj.pushFile())// 读取本地文件obj.preview(function (index, file, result) {var tr = $(['<tr id="upload-' + index + '">','<td>' + file.name + '</td>','<td>' + (file.size / 1024).toFixed(1) + 'kb</td>','<td class="progressContent"><div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div></td>','<td class="operate">',// '<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(''));// 单个重传$("body").delegate('#upload-' + index + " .demo-reload", "click", function () {var progress = '<div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div>'element.progress('progress-demo-' + index, '0%');obj.upload(index, file);});// 删除$("body").delegate(".demo-delete", "click", function () {delete files[index]; // 删除对应的文件tr.remove(); // 删除表格行// 清空 input file 值,以免删除后出现同名文件不可选uploadListIns.config.elem.next()[0].value = '';});that.elemList.append(tr);element.render('progress'); // 渲染新加的进度条组件});},done: function (res, index, upload) { // 成功的回调var that = this;if (res.code == 0) { // 上传成功console.log('done-success', res, index, upload)var tr = that.elemList.find('tr#upload-' + index)var tds = tr.children();tds.eq(3).html(''); // 清空操作var td = $(['<button class="layui-btn layui-btn-xs table-preview " onclick="showAnnex(\'' + res.data[0].src + '\')">下载</button>','<button class="layui-btn layui-btn-xs layui-btn-danger table-delete">删除</button>'].join(''));$("#upload-" + index).find(".operate").empty();// console.log('$("#" + index).find(".operate")', $("#" + index).find(".operate"))$("#upload-" + index).find(".operate").append(td);$("#upload-" + index).attr("data-src", res.data[0].src)fileList.push({src: res.data[0].src,name: this.files[index].name,size: res.data[0].size,})console.log('fileList', fileList)delete this.files[index]; // 删除文件队列已经上传成功的文件return;}else {console.log('done', res, index, upload)var td = $(['<button class="layui-btn layui-btn-xs demo-reload ">重传</button>','<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'].join(''));$("#upload-" + index).find(".operate").empty();// console.log('$("#" + index).find(".operate")', $("#" + index).find(".operate"))$("#upload-" + index).find(".operate").append(td);this.error(index, upload);}},allDone: function (obj) { // 多文件上传完毕后的状态回调console.log(obj)},error: function (index, upload) { // 错误回调var that = this;var tr = that.elemList.find('tr#upload-' + index);var tds = tr.children();// 显示重传tds.eq(3).find('.demo-reload').removeClass('layui-hide');},progress: function (n, elem, e, index) { // 注意:index 参数为 layui 2.6.6 新增element.progress('progress-demo-' + index, n + '%'); // 执行进度条。n 即为返回的进度百分比}
});
//删除按钮事件
$("body").delegate(".table-delete", "click", function () {let src = $(this).parents('tr').attr("data-src")console.log('delete', src)let deleteIndex = -1;fileList.forEach(function (item, index) {if (item.src == src) {deleteIndex = index}})if (deleteIndex != -1) {fileList.splice(deleteIndex, 1)}$(this).parents('tr').remove();
});
//开始上传按钮事件
$("body").delegate("#ID-upload-demo-files-action", "click", function () {$("#ID-upload-demo-files-list tr").each(function (index, item) {if ($(item).attr("data-src") == undefined || $(item).attr("data-src") == 'undefined') {$(item).find(".operate").empty();}// console.log(' $(item).attr("src")', $(item).attr("data-src"))});
})

 

相关文章:

【layui】多文件上传组件实现

插件预览效果&#xff1a; 需要引入layui的脚本文件layui.js和样式文件layui.css html代码&#xff1a; <div class"layui-input-block"><div class"layui-upload-list"><table class"layui-table"><colgroup><col…...

多维最短路

D-最短&#xff1f;路径_牛客小白月赛102 (nowcoder.com) #include <bits/stdc.h> #define int long long using namespace std; const int N1e6; struct node {int x;int y;int z;bool operator>(const node& other) const {return x> other.x;} }; signed m…...

设计模式03-装饰模式(Java)

4.4 装饰模式 1.模式定义 不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 2.模式结构 抽象构件角色 &#xff1a;定义一个抽象接口以规范准备接收附加责任的对象。客户端可以方便调用装饰类和被装饰类…...

TiDB 监控组件之 Blackbox_exporter 运行原理

作者&#xff1a; TiDBerHailang 原文来源&#xff1a; https://tidb.net/blog/b269e96f 1. 介绍 本文介绍了 TiDB 集群监控组件Blackbox Exporter监控运行机制和配置方式。Blackbox Exporter是Prometheus官方提供的 Exporter&#xff0c;它能够通过多种协议对网络服务进行…...

Java之网络编程详解

一、Java网络编程的基本概念 Java网络编程是指在Java语言中使用网络协议和API进行网络通信的编程技术。Java网络编程可以实现多种应用场景&#xff0c;包括客户端/服务器通信、网站开发、分布式系统等。 二、Java网络编程的基本原理 网络编程的核心概念包括网络通信协议、So…...

苍穹外卖学习笔记(二十)

文章目录 用户端历史订单模块&#xff1a;查询历史订单OrderControllerOrderServiceOrderServiceImpl 查询订单详情OrderControllerOrderServiceOrderServiceImpl 用户端历史订单模块&#xff1a; 查询历史订单 OrderController /*** 历史订单*/GetMapping("/historyOrd…...

2024 第一次周赛

A: 题目大意 骑士每连续 i 天每天会得到 i 个金币&#xff0c;&#xff08;i 1&#xff0c; 2&#xff0c; 3 &#xff0c; …&#xff09;,那么展开看每一天可以得到的金币数&#xff1a;1 2 2 3 3 3 4 4 4 5 5 5 5 5 … 可以发现就是1个1 &#xff0c;2个2, 3个3…,那么我…...

【数据脱敏方案】不使用 AOP + 注解,使用 SpringBoot+YAML 实现

文章目录 引入认识 YAML 格式规范定义脱敏规则格式脱敏逻辑实现读取 YAML 配置文件获取脱敏规则通过键路径获取对应字段规则原始优化后 对数据进行脱敏处理递归生成字段对应的键路径脱敏测试 完整工具类 引入 在项目中遇到一个需求&#xff0c;需要对交易接口返回结果中的指定…...

dbt doc 生成文档命令示例应用

DBT提供了强大的命令行工具&#xff0c;它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够为数据模型生成文档&#xff0c;这就是dbt docs命令发挥作用的地方。本教程将指导您完成使用dbt生成和提供项目文档的过程。 dbt doc 命令 dbt docs命令有…...

【Windows】【DevOps】Windows Server 2022 安装ansible,基于powershell实现远程自动化运维部署 入门到放弃!

目标服务器安装openssh server参考 【Windows】【DevOps】Windows Server 2022 在线/离线 安装openssh实现ssh远程登陆powershell、scp文件拷贝-CSDN博客 注意&#xff1a;Ansible不支持Windows操作系统部署 根据官方说明&#xff1a; Windows Frequently Asked Questions —…...

深入理解 Parquet 文件格式

深入理解 Parquet 文件格式 深入理解 Parquet 文件格式一、引言二、为什么采用 Parquet 格式1. 行式存储的局限性2. 列式存储的优势 三、Parquet 的工作原理1. 文件结构2. 列块和页面3. 编码和压缩 四、具体数据实例1. 数据示例2. 行式存储 vs 列式存储3. 查询性能对比4. 压缩效…...

计算机挑战赛3

老式的计算机只能按照固定次序进行运算&#xff0c;华安大学就有这样一台老式计算机&#xff0c;计算模式为AB#C&#xff0c;和#为输入的运算符(可能是、-或*&#xff0c;运算符优先级与C一致)&#xff0c;现给出A&#xff0c;B&#xff0c;C的数值以及和#对应的运算符&#xf…...

深度学习:循环神经网络—RNN的原理

传统神经网络存在的问题&#xff1f; 无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。 RNN神经网络 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;是一种专门用于处理序列数据的神经网络。在处理序列输入时具有记忆性…...

蓝桥杯刷题--幸运数字

幸运数字 题目: 解析: 我们由题目可以知道,某个进制的哈沙德数就是该数和各个位的和取整为0.然后一个幸运数字就是满足所有进制的哈沙德数之和.然后具体就是分为以下几个步骤 1. 我们先写一个方法,里面主要是用来判断,这个数在该进制下是否是哈沙德数 2. 我们在main方法里面调用…...

Node.js入门——fs、path模块、URL端口号、模块化导入导出、包、npm软件包管理器

Node.js入门 1.介绍 定义&#xff1a;跨平台的JS运行环境&#xff0c;使开发者可以搭建服务器端的JS应用程序作用&#xff1a;使用Node.Js编写服务器端代码Node.js是基于Chrome V8引擎进行封装&#xff0c;Node中没有BOM和DOM 2.fs模块-读写文件 定义&#xff1a;封装了与…...

多元线性回归:机器学习中的经典模型探讨

引言 多元线性回归是统计学和机器学习中广泛应用的一种回归分析方法。它通过分析多个自变量与因变量之间的关系&#xff0c;帮助我们理解和预测数据的行为。本文将深入探讨多元线性回归的理论背景、数学原理、模型构建、技术细节及其实际应用。 一、多元线性回归的背景与发展…...

域1:安全与风险管理 第1章实现安全治理的原则和策略

---包括OSG 1、2、3、4 章--- 第1章、实现安全治理的原则和策略 1、由保密性、完整性和可用性组成的 CIA 三元组。 保密性原则是指客体不会被泄露给 未经授权的主体。完整性原则是指客体保持真实性且只被经过授权的主体进行有目的的修改。 可用性原则指被授权的主体能实时和…...

【大数据】学习大数据开发应该从哪些技术栈开始学习?

学习大数据开发可以从以下几个技术栈和阶段入手。以下内容按学习顺序和重要性列出&#xff0c;帮助你逐步掌握大数据开发的核心技能&#xff1a; 1. 编程基础 Java&#xff1a;Hadoop 和许多大数据工具&#xff08;如 Spark、Flink&#xff09;的核心代码都是用 Java 编写的&…...

CentOS快速配置网络Docker快速部署

CentOS快速配置网络&&Docker快速部署 CentOS裸机Docker部署1.联通外网2.配置CentOS镜像源3.安装Docker4.启动Docker5.CentOS7安装DockerCompose Bug合集ERROR [internal] load metadata for docker.io/library/java:8-alpineError: Could not find or load main class …...

Grounded-SAM Demo部署搭建

目录 1 环境部署 2 Grounded-SAM Demo安装 3 运行Demo 3.1 运行Gradio APP 3.2 Gradio APP操作 1 环境部署 由于SAM建议使用CUDA 11.3及以上版本&#xff0c;这里使用CUDA 11.4版本。 另外&#xff0c;由于整个SAM使用的是Pytorch开发&#xff0c;因此需要Python环境&…...

GCC开发者转LLVM必看:模块化设计带来的5个关键工作流变革

GCC开发者转LLVM必看&#xff1a;模块化设计带来的5个关键工作流变革 当GCC开发者第一次接触LLVM时&#xff0c;往往会惊讶于其完全不同的设计哲学。就像从单块巨石建筑转向预制模块化结构&#xff0c;LLVM的三段式架构不仅改变了代码的组织方式&#xff0c;更从根本上重塑了编…...

ChatGLM3-6B-128K部署指南:Ollama环境配置避坑大全

ChatGLM3-6B-128K部署指南&#xff1a;Ollama环境配置避坑大全 本文面向需要处理长文本任务的开发者和研究者&#xff0c;手把手教你如何快速部署ChatGLM3-6B-128K模型&#xff0c;避开环境配置中的常见坑点。 1. 环境准备与快速部署 在开始部署之前&#xff0c;我们先简单了解…...

Phi-3-mini-128k-instruct创意写作效果集锦:技术博客、邮件、周报一键生成

Phi-3-mini-128k-instruct创意写作效果集锦&#xff1a;技术博客、邮件、周报一键生成 每次打开文档&#xff0c;面对空白的页面&#xff0c;你是不是也有过那种“万事开头难”的感觉&#xff1f;特别是写技术博客、整理会议邮件、或者汇总项目周报的时候&#xff0c;明明脑子…...

STM32主从定时器实战:用CubeMX搞定PWM移相+动态调占空比(附G474配置)

STM32主从定时器实战&#xff1a;CubeMX图形化配置PWM移相与动态调占空比 在电力电子和电机控制领域&#xff0c;精确的PWM信号控制是系统高效运行的关键。对于需要多路相位可调PWM的应用场景&#xff0c;如交错并联DC/DC变换器、三相逆变器等&#xff0c;传统的手动寄存器配置…...

将 OnePlus 手机备份到云服务

丢失 OnePlus 设备上的珍贵照片、重要联系人、短信或应用数据可能会令人非常沮丧&#xff0c;无论是意外删除、设备损坏、被盗&#xff0c;甚至是恢复出厂设置。这时&#xff0c;云备份就派上了用场。它提供了一种简单可靠的数据保护方式&#xff0c;确保您可以随时随地在新 On…...

Qwen3.5-27B-GPTQ-Int4:超高效多模态AI新体验

Qwen3.5-27B-GPTQ-Int4&#xff1a;超高效多模态AI新体验 【免费下载链接】Qwen3.5-27B-GPTQ-Int4 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3.5-27B-GPTQ-Int4 导语 阿里云推出Qwen3.5-27B-GPTQ-Int4模型&#xff0c;通过4位量化技术实现性能与效率的双…...

如何在macOS上制作Windows启动盘:WinDiskWriter终极指南

如何在macOS上制作Windows启动盘&#xff1a;WinDiskWriter终极指南 【免费下载链接】windiskwriter &#x1f5a5; A macOS app that creates bootable USB drives for Windows. &#x1f6e0; Patches Windows 11 to bypass TPM and Secure Boot requirements. 项目地址: h…...

ReAct Agent:新手程序员必看!收藏这款融合推理与行动的AI智能体框架,轻松入门大模型应用开发

ReAct框架通过结合推理与行动&#xff0c;解决了传统提示工程的局限性&#xff0c;构建出能主动思考、决策并执行复杂任务的智能体。本文详细介绍了ReAct的核心设计思想&#xff0c;包括推理模块的动态思考链和错误回溯机制&#xff0c;以及行动模块的工具集成和环境状态感知。…...

双阶段目标检测算法演进:从R-CNN到Mask R-CNN的技术突破与应用实践

1. 双阶段目标检测算法概述 目标检测是计算机视觉领域的核心任务之一&#xff0c;它不仅要识别图像中的物体类别&#xff0c;还要精确定位物体的位置。在众多目标检测算法中&#xff0c;双阶段检测算法因其高精度特性&#xff0c;一直是工业界和学术界的研究热点。这类算法的典…...

Windows10下用VS2019编译UE4.27源码的完整避坑指南(附环境配置截图)

Windows 10下用VS2019编译UE4.27源码的完整避坑指南 第一次在Windows 10上编译UE4.27源码&#xff0c;就像在迷宫中寻找出口——每个转角都可能藏着意想不到的陷阱。作为一位经历过无数次编译失败的老兵&#xff0c;我深知那些看似简单的步骤背后隐藏的魔鬼细节。本文将带你避开…...