layui多文件上传与下载示例

2023-11-03

第一次写文件上传,不知道怎么下手。 幸好有万能layui 方便了很多
HTML

`<div class="layui-body-header">
	<span class="layui-body-header-title">产品文件上传</span>
</div>
<div class="layui-upload">
	<div class="layui-upload-list">
		<input type="hidden" id="id" name="id" value="${id}" />
		<table class="layui-table">
			<thead>
				<tr>
					<th>文件名</th>
					<th>大小</th>
					<th>状态</th>
					<th>操作</th>
				</tr>
			</thead>
			<tbody id="demoList"></tbody>
		</table>
	</div>
	<div style="text-align: center;">
	<button type="button" class="layui-btn layui-btn-normal" id="testList"><i class="layui-icon">&#xe655;</i>选择文件</button>
	<button type="button" class="layui-btn" id="testListAction"><i class="layui-icon">&#xe67c;</i>开始上传</button>
	</div>
</div>`

js

`layui.use('upload', function(){
  var $ = layui.jquery
  ,upload = layui.upload;
  
  
  var demoListView = $('#demoList')
  ,uploadListIns = upload.render({
    elem: '#testList'
    ,url:  Feng.ctxPath + '/productInfo/uploadFiles'
    ,accept: 'file'
    ,multiple: true
    ,auto: false
    ,bindAction: '#testListAction'
    ,data:{id: function(){
        return $('#id').val();
    }
    }
    ,choose: function(obj){   
      var files = this.files = obj.pushFile(); // 将每次选择的文件追加到文件队列
      // 读取本地文件
      obj.preview(function(index, file, result){
        var tr = $(['<tr id="upload-'+ index +'">'
          ,'<td>'+ file.name +'</td>'
          ,'<td>'+ (file.size/1014).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-reload').on('click', function(){
          obj.upload(index, file);
        });
        
        // 删除
        tr.find('.demo-delete').on('click', function(){
          delete files[index]; // 删除对应的文件
          tr.remove();
          uploadListIns.config.elem.next()[0].value = ''; // 清空 input file
															// 值,以免删除后出现同名文件不可选
        });
        
        demoListView.append(tr);
      });
    }
    ,done: function(res, index, upload){
      if(res.code == 0){ // 上传成功
        var tr = demoListView.find('tr#upload-'+ index)
        ,tds = tr.children();
        tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
        tds.eq(3).html(''); // 清空操作
        return delete this.files[index]; // 删除文件队列已经上传成功的文件
      }
      this.error(index, upload);
    }
    ,error: function(index, upload){
      var tr = demoListView.find('tr#upload-'+ index)
      ,tds = tr.children();
      tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
      tds.eq(3).find('.demo-reload').removeClass('layui-hide'); // 显示重传
    }
  });
})`

controller


    /**
    	 * 文件上传
    	 * 
    	 * @param file
    	 * @param request
    	 * @return
    	 */
    	@RequestMapping("/uploadFiles")
    	@ResponseBody
    	public ResponseData uploadFiles(@RequestPart("file") MultipartFile file, Long id, HttpServletRequest request) {
    		fileInfoService.uploadFile(file, id, fileProperties.getProdPath());
    		HashMap<String, Object> map = new HashMap<>();
    		map.put("fileId", IdWorker.getIdStr());
    		return ResponseData.success(0, "上传成功", map);
    	}

controller调用的uploadFile方法


     /**
         * 上传文件
         * uploadFile方法重载,需要传父表id,应对一条记录对应多个文件的情况
         * @author 
         * @Date 2019-08-21 
         * @return
         */
        public String uploadFile(MultipartFile file,Long pid,String fileUploadPath ) {
    
            //生成文件的唯一id
            String fileId = IdWorker.getIdStr();
    
            //获取文件后缀
            String fileSuffix = ToolUtil.getFileSuffix(file.getOriginalFilename());
    
            //获取文件原始名称
            String originalFilename = file.getOriginalFilename();
    
            //生成文件的最终名称
            String finalName = fileId + "." + ToolUtil.getFileSuffix(originalFilename);
    
            try {
                //保存文件到指定目录
                String fileSavePath = getFileUploadPath(fileUploadPath);
                File newFile = new File(fileSavePath + finalName);
                file.transferTo(newFile);
    
                //保存文件信息
                FileInfo fileInfo = new FileInfo();
                fileInfo.setFileId(Long.valueOf(fileId));
                fileInfo.setFilePid(pid);
                fileInfo.setFileName(originalFilename);
                fileInfo.setFileSuffix(fileSuffix);
                fileInfo.setFilePath(fileSavePath + finalName);
                fileInfo.setFinalName(finalName);
    
                //计算文件大小kb
                long kb = new BigDecimal(file.getSize())
                        .divide(BigDecimal.valueOf(1024))
                        .setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
                fileInfo.setFileSizeKb(kb);
                this.save(fileInfo);
            } catch (Exception e) {
                log.error("上传文件错误!", e);
                throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
            }
    
            return fileId;
    
        }

下载

下载就比较简单了 直接用个<a></a>标签 href=""写文件的路径就OK了

<a href="/xxxxx/xxxx/xxxxxx.xxx" class="layui-table-link">显示的下载名称</a>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

layui多文件上传与下载示例 的相关文章

  • CPU基础知识之Cache介绍

    一 什么是Cache Cache就是CPU缓存 它是位于CPU和内存之间的临时存储器 CPU在读取数据进行计算的时候 首先是从内部的缓存中查找需要的数据 如果有 可以最短时间最快速度交付CPU 但是如果没有找到 CPU就会提出 要求 经过缓
  • 一款桌面整理软件——Fences

    一款桌面整理软件 Fences 一款桌面整理软件 Fences 接下来是安装步骤 下载安装包 一款桌面整理软件 Fences 给大家推荐一款桌面整理软件 fences 一般来说这款软件是收费的 但是 作为穷鬼的我暂时还是决定用一款破解版 f
  • 使用 Linux 相关知识部署博客系统

    目录 编辑一 认识 Linux 二 如何拥有 Linux 环境 三 常见的 Linux 命令 1 目录相关命令 1 ls 2 pwd 3 cd 2 文件操作相关命令 1 touch 2 cat 3 echo 3 vim vim 的关键概念
  • 机械臂视觉抓取总结

    基于视觉的机械臂抓取的三个关键任务 目标定位 目标姿态估计和抓取估计 目标定位 无分类的目标定位 目标检测和目标实例分割 此任务在输入数据中提供目标对象的区域 目标姿态估计 对6D目标姿态进行估计 包括基于对应的方法 基于模板的方法和基于投
  • 阿里云服务器ECS带宽计费模式租用价格表

    阿里云服务器ECS公网带宽地域不同价格不同 以北京地域为例1M带宽一个月价格是23元 M 月 按流量计费价格是1GB流量0 8元 带宽值达到6M后 超过5M的部分带宽单价上涨到80元 M 月 中国香港地域带宽1M带宽30元一个月 按流量计费
  • 加州房价预测项目详细笔记(Regression)——(2)采样(数据分割)<重要>

    参考内容 机器学习实战 原作者github https github com ageron handson ml 加州房价预测项目精细解释https blog csdn net jiaoyangwm article details 8167

随机推荐

  • html改变按钮水平位置,div中button水平居中

    CSS如何让一个按钮居中应该怎么做 通过这样的Css样式就可以实现 使用margin left auto margin right auto 可以让你的div居中对齐 style margin left auto margin right
  • Spring Boot中使用thymeleaf以及各种取值,判断,选择,截取等方式

    Spring Boot中使用thymeleaf Spring Boot支持FreeMarker Groovy Thymeleaf和Mustache四种模板解析引擎 官方推荐使用Thymeleaf spring boot starter th
  • 100决杀

    1 所有的困苦都是有用意的 这是老天爷在磨练你 为了把重任交给你 2 毛遂自荐 好处多多 让别人看到你 知道你的存在 知道你的能力 3 千万别入错行 人情有牵绊 恩怨的纠葛 转行可不是那幺容易的呀 4 别轻易转行 转行的风险很林 若无大决心
  • MATLAB代码:微电网两阶段鲁棒优化经济调度程序 关键词:微网优化调度 两阶段鲁棒 CCG算法 经济调度

    MATLAB代码 微电网两阶段鲁棒优化经济调度程序 关键词 微网优化调度 两阶段鲁棒 CCG算法 经济调度 仿真平台 MATLAB YALMIP CPLEX 主要内容 构建了微网两阶段鲁棒调度模型 建立了min max min 结构的两阶段
  • STM32学习笔记:串口一键下载电路(CH340)的理解

    如图 为原子的串口下载电路 在CH340的数据手册上有引脚的介绍以及作用 这两个引脚 DTR 和RTS 都是 输出类型 MCUISP 一键下载工具 会控制CH340这两个引脚的高低电平状态 通过控制DTR 和RST 这两个引脚的高低电平状态
  • 897. 最长公共子序列 线性dp

    给定两个长度分别为 N 和 M 的字符串 A 和 B 求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少 输入格式 第一行包含两个整数 N 和 M 第二行包含一个长度为 N 的字符串 表示字符串 A 第三行包含一个长度为 M 的字
  • 计算机键盘换挡键,电脑键盘上的换挡键是哪个

    Esc 退出键 英文Escape 的缩写 中文意思是逃脱 出口等 在电脑的应用中主要的作用是退出某个程序 例如 我们在玩游戏的时候想退出来 就按一下这个键 Tab 表格键 可能大家比较少用这一个键 它是Table的缩写 中文意思是表格 在电
  • windows nignx 常用操作命令(启动、停止、重启服务)

    文章目录 1 查看nginx 版本号 2 根据名称查询 window 下的nginx 的启动进程 3 再根据端口号查询进程 4 启动nginx 命令 5 停止nginx 6 快速停止或关闭Nginx 7 正常停止或关闭Nginx 8 配置文
  • Open3D Ransac拟合分割多个球体

    目录 一 算法原理 二 代码实现 三 结果展示 四 测试数据 一 算法原理 算法的核心原理还是RANSAC拟合球面 具体理论可参考 Open3D RANSAC三维点云球面拟合 只是对代码稍加修改使其适用于分割点云数据中的多个球体 二 代码实
  • 回归平方和 ESS,残差平方和 RSS,总体平方和 TSS

    https zhidao baidu com question 565190261749684764 html 回归平方和 ESS 残差平方和 RSS 总体平方和 TSS 总变差 TSS 被解释变量Y的观测值与其平均值的离差平方和 总平方和
  • 5.12 数据结构——哈夫曼编码

    在远程通讯中 要将待传字符转换成二进制的字符串 假设要传输的字符为 ABACCDA 若编码为 A 00 B 01 C 10 D 11 那么要传输的字符的编码为 00010010101100 若将编码设计为长度不等的二进制编码 即让待传字符串
  • 基于深度学习的人脸表情识别(一)

    第一篇博客就不用Markdown 什么鬼 来写了 今天主要是被老板一通说 然后说两月看10篇paper 算了 还是丫丫自己先多码码论文吧 再加之这几天有开博的想法 就索性一起开了 顺道总结下最近看的一篇中文的 Facial Expressi
  • 【CPU】常见术语解释

    interrupt service routine ISR 中断服务程序 中断 指当CPU正在处理某件事情时 外部发生的某一事件 如一个电平的变化 一个脉冲沿的发生或 定时器计数溢出等 请求CPU迅速去处理 于是CPU暂时中止当前的工作 转
  • 【机器学习基础】Python机器学习入门指南(全)

    前言 机器学习 作为人工智能领域的核心组成 是计算机程序学习数据经验以优化自身算法 并产生相应的 智能化的 建议与决策的过程 一个经典的机器学习的定义是 A computer program is said to learn from ex
  • 计算机转换汉子英语,中英文切换(电脑怎么切换拼音打字)

    在打字时需要输入英文怎么切换 用搜狗等各类拼音法的话 不用切换就可自由地 中英 非常简单 没有人不知道吧 方法是 汉字状态时 按回车键就是英文字母 此时按空格键是汉字 谁能告诉我小键盘旁边 也就是全角和半角的旁边的中文和英文符号 切换的 c
  • vue-element-admin/template登录Request failed with status code 405

    问题 vue element admin vue admin template 登录不上 报错Request failed with status code 405 解决 main js的开发配置production修改为开发模式 deve
  • opencv 识别长方形_使用OpenCV检测图像中的矩形

    本文实例为大家分享了OpenCV检测图像中矩形的具体代码 供大家参考 具体内容如下 前言 1 OpenCV没有内置的矩形检测的函数 如果想检测矩形 要自己去实现 2 我这里使用的OpenCV版本是3 30 矩形检测 1 得到原始图像之后 代
  • shell基础语法

    1 变量 语法 变量名 变量值 PS 两边不能有空格 1 使用变量 变量名 ex Name wendy 声明变量 echo Name 或 echo Name 输出变量 ps 花括号可选 2 只读变量 readonly 变量 3 删除变量 u
  • maven明明本地仓库有依赖包,还会远程下载的问题

    我今天在无网的环境下 打算进行maven编译打包 可是明明有本地仓库 也配置了本地仓库 但是还是会从远程下载 然后再各大网友的帮助下 百度 谷歌 查询到主要的原因是在本地仓库的每个依赖包都存在 remote repositories文件 直
  • layui多文件上传与下载示例

    第一次写文件上传 不知道怎么下手 幸好有万能layui 方便了很多 HTML div class layui body header span class layui body header title 产品文件上传 span div di