客户用IE批量下载文件文件到不同文件夹不压缩(包含分页带条件动态查询)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>首页</title><script type="text/javascript" th:src="@{/vue/jQuery.js}"></script><style>.login-box {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}/* 模态框 */.login-box {display: none;width: 650px;height: 250px;border: 1px solid rgb(216, 216, 216);border-radius: 10px;box-shadow: 5px 5px 10px rgba(10, 20, 20, .2), -5px -5px 10px rgba(10, 20, 20, .2);background-color: #fff;/* 和遮罩层同理,模态框一定要在最上层 */z-index: 1;}.login-box .title {cursor: move;user-select: none; /* 禁止用户选中文字 */position: relative;width: 100%;height: 70px;color: #3f3f3f;font-size: 20px;font-weight: 700;text-align: center;line-height: 70px;}.login-box .title .exit {position: absolute;top: -10px;right: 10px;font-size: 30px;}.login-box .title .exit:hover {cursor: pointer;text-shadow: 2px 2px 4px rgba(10, 20, 20, .5);}.login-box #form {display: flex;flex-direction: column;justify-content: center;align-items: center;padding: 10px 0;}.login-box #form .input-box {width: 60%;height: 35px;margin-bottom: 20px;padding: 0px 10px;border: 1px solid #3f3f3f;border-radius: 8px;color: #3f3f3f;font-size: 16px;font-weight: 700;}.login-box #form .input-box:focus {outline: none;}.login-box #form .login-but {width: 120px;height: 35px;border: none;background-color: #fa8282;border-radius: 8px;color: #fff;font-size: 20px;font-weight: 700;margin-bottom: 20px;}.login-box #form .login-but:hover {background-color: #f36886;}/*    table表格*/table {width: 100%;border-collapse: collapse;}table caption {font-size: 2em;font-weight: bold;margin: 1em 0;}th, td {border: 1px solid #999;text-align: center;padding: 5px 0;}table thead tr {background-color: #008c8c;color: #fff;}table tbody tr:nth-child(odd) {background-color: #eee;}table tbody tr:hover {background-color: #ccc;}table tbody tr td:first-child {color: #f40;}table tfoot tr td {text-align: right;padding-right: 20px;}</style>
</head>
<body>
<div style="float: right"><a href="wlto_ForestHtml">林权档案下载</a><a href="/getpdf/getPage">刷新到主页</a><a href="/getpdf/getPicLog">图片下载日志</a><a href="/getpdf/logAdminOUt">退出登录</a></div>
</div>
<br/>
<form action="#" onsubmit="return false;" style="text-align: center;margin: auto;">编号:<input type="text" id="v_aid" name="v_aid" style="width: 100px">坐落:<input type="text" id="v_location" name="v_location" style="width: 300px"><input type="submit" value="查询" onclick="selectData();">
</form>
<div><br><table border="1" id="messages_table" style="text-align: center;margin: auto;border-collapse: collapse;"><tr><th><input type="checkbox" name="checkAll"></th><th>序号</th><th>编号</th><th>档案号</th><th>坐落</th><th>档案下载时间</th><th>下载人</th><th>下载次数</th><th>操作</th></tr><tr th:each="datas : ${page.list}"><td><input type="checkbox" name="item" th:value="${datas.aid}"></td><td th:text="${datas.num}"></td><td th:text="${datas.aid}"></td><td th:text="${datas.docno}"></td><td th:text="${datas.location}"></td><td th:text="${#dates.format(datas.downtime,'yyyy-MM-dd')}"></td><td th:text="${datas.downuser}"></td><td th:text="${datas.downcount}"></td><td><a href="#" onclick="myFunction(this.getAttribute('data-id'))" th:data-id="${datas.aid}">下载</a></td></tr></table>
</div>
<div style="text-align: center;margin: auto;"><a href="#" onclick="batchDown()">批量下载</a>
</div>
<!--引入page.html分页模板-->
<div th:insert="wl/page::page"></div><div class="login-box"><div class="title">图片下载<span class="exit">×</span></div><div id="form"><div><input type="hidden" id="ywh"><div style="float: left;"><input type="text" id="path" style="width: 460px;" class="input-box" name="path" placeholder="选择下载路径"/></div><div style="float: right;margin-left:20px;"><input type=button class="login-but" style=" background-color:skyblue;" value="选择"onclick="browseFolder('path')"></div></div><button id="btn" class="login-but" style="width: 260px; background-color:skyblue;"onclick="myFunction('batch')">下载</button></div></div>
<script>let loginBox = document.querySelector('.login-box');//模态框let exit = document.querySelector('.exit');// 关闭模态框事件exit.addEventListener('click', function () {loginBox.style.display = "none";});let title = document.querySelector('.title');// 拖动标题区域可移动模态框title.addEventListener('mousedown', function (event) {// 计算鼠标在登录框中坐标let x = event.pageX - loginBox.offsetLeft;let y = event.pageY - loginBox.offsetTop;// 给页面添加鼠标移动事件document.addEventListener('mousemove', loginBoxMove);function loginBoxMove(event) {loginBox.style.left = (event.pageX - x) + "px";loginBox.style.top = (event.pageY - y) + "px";}// 鼠标松开后移除页面的鼠标移动事件document.addEventListener('mouseup', function () {document.removeEventListener('mousemove', loginBoxMove);})});/*** 用户自选文件夹 注意开启IE控件*/function browseFolder(path) {try {var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息debuggervar Shell = new ActiveXObject("Shell.Application");var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为:我的电脑//var Folder = Shell.BrowseForFolder(0, Message, 0); //起始目录为:桌面if (Folder != null) {Folder = Folder.items(); // 返回 FolderItems 对象Folder = Folder.item(); // 返回 Folderitem 对象Folder = Folder.Path; // 返回路径if (Folder.charAt(Folder.length - 1) != "\\") {// Folder = Folder + "\\";}document.getElementById(path).value = Folder;return Folder;}} catch (e) {alert(e.message);}}//下载//成功的文件var success = [];var s = 0;//失败的文件var fail = [];var f = 0;function myFunction(abth) {// 获取文件路劲var dPath = document.getElementById("path").value;//文件地址格式 C:\Users\lff\Desktop\客户机指定文件夹if (dPath == "") {alert("请先选择文件地址!!!")$('input[name="item"]').each(function () {if ($(this).val() == abth) {$(this).prop("checked", true);}});loginBox.style.display = "block";return false;}if (abth == "batch") {// 文件名 多个var checkID = [];//定义一个空数组$("input[name='item']:checked").each(function (i) {//把所有被选中的复选框的值存入数组checkID[i] = $(this).val();console.log(checkID);});if (checkID.length == 0) {alert("请先勾选下载项或者点击单个下载");return false;}//循环调用方法for (var i = 0; i < checkID.length; i++) {//调用单个方法downFileOne(dPath, checkID[i]);}//展示下载结果alert("等待下载,共计" + checkID.length + "个档案流水号,请在文件中查看")loginBox.style.display = "none";} else {//单个下载downFileOne(dPath, abth);//展示下载结果alert(ywh + "已经下载成功");loginBox.style.display = "none";}}//单个业务编号下载function downFileOne(dPath, fileName) {console.log("输出" + dPath + "\\" + fileName);var fso;fso = new ActiveXObject("Scripting.FileSystemObject");//如果文件夹存在 覆盖console.log('操作:' + dPath + "\\" + fileName)var a = fso.FolderExists(dPath + "\\" + fileName);if (!a) {fso.CreateFolder(dPath + "\\" + fileName);} else {console.log("文件夹已经存在")}//fso.DeleteFolder (dPath+"\\"+fileName);//调用方法下载downloadFileByAjax("wlDownloadByJS", dPath, 0, fileName);}/*** 通过ajax下载文件** @param {string} fileUrl 文件远程地址* @param {string} filePath 文件本地路径* @returns*/function downloadFileByAjax(fileUrl, filePath, index, fileName) {if (filePath == null || filePath == undefined) {alert("请输入图片地址");return false;}if (fileName == null || fileName == undefined) {alert("请先选择档案");return false;}var xmlHttp = new XMLHttpRequest();xmlHttp.open('GET', fileUrl + "?index=" + index + "&fileName=" + fileName + "&timestamp=" + new Date().getTime(), true);xmlHttp.onreadystatechange = function () {if (xmlHttp.readyState === 4) {debuggervar fName = decodeURI(xmlHttp.getResponseHeader("fileName"));var tempIndex = xmlHttp.getResponseHeader("index");//接受消息var msg = decodeURI(xmlHttp.getResponseHeader("msg"));console.log(msg);if (msg != "null") {// alert(msg);fail[f] = fileName;f += 1;var tmp_fso;//下载失败  后删除文件夹tmp_fso = new ActiveXObject("Scripting.FileSystemObject");tmp_fso.DeleteFolder(filePath + "\\" + fileName);}console.log("fileName:" + fName);console.log("tempIndex:" + tempIndex);if (xmlHttp.status < 300 && xmlHttp.status >= 200) {if (tempIndex == null || tempIndex == undefined) {if (index > 0) {success[s] = fileName;s += 1;// alert("下载成功!");}return false;}debuggersaveStreamToFile(xmlHttp.responseBody, filePath + "\\" + fileName + "\\" + fName);//******todo注意拼接路劲debuggerdownloadFileByAjax(fileUrl, filePath, tempIndex, fileName);} else {alert("下载失败!");}}};xmlHttp.send();}/*** 保存二进制数据到文件** @export* @param {*} stream* @param {string} filePath*/function saveStreamToFile(stream, filePath) {saveContentToFile(stream, filePath, '1');}function saveContentToFile(content, filePath, type) {debugger//https://blog.csdn.net/haoranhaoshi/article/details/89671101var adodbstream = new ActiveXObject('ADODB.Stream');adodbstream.Mode = '3';adodbstream.Type = type;adodbstream.Open();if (type === '1') {adodbstream.Write(content);} else {adodbstream.WriteText(content);}var fn1 = 'SaveTo';var fn2 = 'File';adodbstream[fn1 + fn2](filePath, 2);adodbstream.Close();}</script></body>
<script type="text/javascript" th:inline="javascript">var pageSizes = [[${page.pageSize}]];var pageNum = [[${page.pageNum}]]; //当前页var v_aid = "";var v_location = "";$(function () {(function ($) {$.getUrlParam = function (name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = encodeURI(window.location.search).substr(1).match(reg);if (r != null)return unescape(r[2]);return null;}})(jQuery);v_aid = decodeURI($.getUrlParam("aid"));v_location = decodeURI($.getUrlParam("location"));if (v_aid == null || v_aid == 'null') {v_aid = "";}if (v_location == null || v_location == 'null') {v_location = "";}$('#v_aid').val(v_aid);$('#v_location').val(v_location);});function batchDown() {//进入页面loginBox.style.display = "block";}function selectData() {var v_aid = $('#v_aid').val(), v_location = $('#v_location').val();window.location = encodeURI("wlto_ForestHtml?pageIndex=" + pageNum + "&pageSize=" + pageSizes + "&aid=" + v_aid + "&location=" + v_location);//window.location ="wlto_ForestHtml?pageIndex="+pageNum+"&pageSize="+pageSizes;}$("select#pageSizes").change(function () {pageSizes = this.value;//发个请求修改当前页面数量window.location = encodeURI("wlto_ForestHtml?pageIndex=" + pageNum + "&pageSize=" + pageSizes + "&aid=" + v_aid + "&location=" + v_location);});$("input[name='checkAll']").click(function () {if ($(this).is(':checked')) {$('input[name="item"]').each(function () {$(this).prop("checked", true);});} else {$('input[name="item"]').each(function () {$(this).prop("checked", false);});}});function toShowDownload(f) {window.location = encodeURI(window.location.pathname.substr(0, window.location.pathname.lastIndexOf("/")) + f + "&pageSize=" + pageSizes + "&aid=" + v_aid + "&location=" + v_location);}
</script>
</html>

page

<!DOCTYPE html>
<!--suppress ALL--> <!-- 去掉红色下划线-->
<html>
<div th:fragment="page"><style>.page {border: 1px solid blue;margin-right: 5px;padding: 3px 5px;}.page.active {color: red;border: 1px solid red;}</style><div style="float: left">当前第<span th:text="${page.pageNum}"></span>页,每页<span th:text="${page.pageSize}"></span>条,<select name="pageSize" id="pageSizes"   style="width: 50px; height: 25px;"><option value="5" >5</option><option value="10" >10</option><option value="20" selected="selected" >20</option><option value="40">40</option><option value="80">80</option><option value="100" >100</option><option value="200">200</option></select> 页行数,总记录数<span th:text="${page.total}"></span></div><div style="float: right"><a href="#"  onclick="toShowDownload(this.getAttribute('data-id'))"  th:text="首页" th:if="${page.pageNum>1}" th:data-id="${path}" ></a><a href="#" onclick="toShowDownload(this.getAttribute('data-id'))"  th:text="上一页" th:if="${page.pageNum>1}" th:data-id="${path}+${page.pageNum-1}"></a><a href="#" onclick="toShowDownload(this.getAttribute('data-id'))"   th:data-id="${path}+${i}"th:each="i:${#numbers.sequence(page.pageNum<5?page.pageNum:page.pageNum-3,page.pageNum+5>=page.pages?page.pages:page.pageNum+5)}"th:text="${i}" th:class="${page.pageNum==i}? 'page active':'page'"></a><a href="#" onclick="toShowDownload(this.getAttribute('data-id'))"   th:text="下一页" th:if="${page.pageNum<page.pages}" th:data-id="${path}+${page.pageNum+1}"></a><a href="#" onclick="toShowDownload(this.getAttribute('data-id'))"   th:text="尾页" th:if="${page.pageNum<page.pages}"  th:data-id="${path}+${page.pages}"></a></div>
</div>
</html>
package com.service.impl;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mapper.ForestMapper;
import com.mapper.FtpserverMapper;
import com.model.Forest;
import com.model.ForestImg;
import com.model.Ftpserver;
import com.model.Pdf;
import com.service.ForestService;
import com.utils.FtpUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;/*** Created with IntelliJ IDEA.** @Author: cqwuliu* @Date: 2024/01/12/18:12  will_isme@163.com* @Description:*/
@Service
@Slf4j
public class ForestServiceImpl implements ForestService {@Autowiredprivate ForestMapper forestMapper;@Autowiredprivate FtpserverMapper ftpserverMapper;@Overridepublic PageInfo<Forest> getFindAll(Integer pageIndex, Integer pageSize, BigDecimal aid, String location) {String condition="";if(aid.compareTo(new BigDecimal("0"))==1){condition+=" and aid="+aid;}if(location!=null&&(!location.equals("null"))&&location.trim().length()>1){condition+=" and instr(t.卷题名,'"+location+"')>0 ";}PageHelper.startPage(pageIndex,pageSize);List<Forest> all   =  forestMapper.findByCondition(condition);PageInfo<Forest> ForestPageInfo = new PageInfo<>(all);return ForestPageInfo;}@Overridepublic void wlDownloadByJS(HttpServletRequest request, HttpServletResponse response) throws Exception {//输入的图片aidString aid=request.getParameter("fileName");if(aid==null){log.error("下载非法访问");return;}String i = request.getParameter("index") == null ? "" : request.getParameter("index");if (i==null ){log.error("下载非法访问");return ;}int index = Integer.parseInt(i);//目录下的文件//List<File> fileList = new ArrayList<>();List<ForestImg> fileList=forestMapper.findImgByPk1(new BigDecimal(aid));//将查找到的文件导入list//fileList.add(new File(jpegPath+"\\"+recordNo+"\\"+fname));if (index > fileList.size()-1){String uname= (String) request.getSession().getAttribute("realname");forestMapper.updatedownStatus(uname,new BigDecimal(aid));return ;}Ftpserver ftpserver=ftpserverMapper.getFtpInfoByServerid(fileList.get(index).getServerid());FtpUtils ftpUtils=new FtpUtils(ftpserver.getHost(), ftpserver.getPort(), ftpserver.getUsername(),ftpserver.getPassword());ByteArrayOutputStream byteArrayOutputStream = ftpUtils.getByteArrayOutputStream(fileList.get(index).getFolder(), fileList.get(index).getFilename());// saveimg(byteArrayOutputStream,fileList.get(index).getFilename());//        //下载出现异常时,发送错误响应到前端
//        if (true){
//           String Msg="没有找到该档案文件请在档案系统查询了解";
//            response.setHeader("msg", URLEncoder.encode(Msg,"UTF-8").replaceAll("\\+", "%20"));//返回错误信息
//            log.info("没有找到该档案文件请在档案系统查询了解");
//            return;
//        }InputStream ins = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());BufferedInputStream bis = new BufferedInputStream(ins);//  BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("D:\\logs\\sydsunew\\aaa\\"+fileList.get(index).getFilename())));response.reset();response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.setHeader("fileName", URLEncoder.encode(fileList.get(index).getFilename(), "UTF-8").replaceAll("\\+", "%20"));response.setHeader("index",index+1+"");ServletOutputStream outputStream = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(outputStream);int len = 0;byte[] buf = new byte[10 * 1024];while( (len=bis.read(buf, 0, buf.length)) != -1){bos.write(buf, 0, len);}bis.close();bos.flush();bos.close();}private void saveimg(ByteArrayOutputStream outputStream,String fname ){FileOutputStream fileOutputStream = null;try {fileOutputStream = new FileOutputStream("D:\\logs\\aaa\\"+fname);} catch (FileNotFoundException e) {e.printStackTrace();}try {outputStream.writeTo(fileOutputStream);fileOutputStream.flush();fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}

找到IE设置,添加到受信任网址,自定义级别,将activeX开启或者提示
跨域游览窗口和框架,通过域访问数据源,允许游览器控制的脚本运行

      <!--分页--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.5</version></dependency>
org.projectlombok lombok true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费scrum管理工具Leangoo敏捷做缺陷跟踪管理

缺陷管理通常关注如下几个方面&#xff1a; 1. 缺陷的处理速度 2. 缺陷处理的状态 3. 缺陷的分布 4. 缺陷产生的原因 使用Leangoo敏捷看板我们可以对缺陷进行可视化的管理&#xff0c;方便我们对缺陷的处理进展、负责人、当前状态、分布情况等各个方面一目了然。 下面我们…

在less中选择某个父元素的儿子的办法

在 LESS 中> 选择器&#xff0c;选择的是 儿子元素&#xff0c;就是 必须与父元素 有直接血源的元素。例如 /deep/ .dialog-footer > .el-button

安卓APP和小程序渗透测试技巧总结

记得开启模拟器的ROOT权限&#xff1a;本文章仅供学习和研究使用&#xff0c;严禁使用该文章内容对互联网其他应用进行非法操作&#xff0c;若将其用于非法目的&#xff0c;所造成的后果由您自行承担。 由于安卓7开始对系统安全性做了些改动&#xff0c;导致应用程序不再信任客…

设计模式——一文即可

对常用设计模式的总结&#xff0c;也是对设计模式专栏的总结 简单工厂模式 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式&#xff0c;通过将对象的创建逻辑封装在一个工厂类中&#xff0c;客…

【深度学习环境搭建】Windows搭建Anaconda3、已经Pytorch的GPU版本

目录 搭建Anaconda3搭建GPU版本的Pytorch你的pip也要换源&#xff0c;推荐阿里源打开conda的PowerShell验证 搭建Anaconda3 无脑下载安装包安装&#xff08;自行百度&#xff09; 注意点&#xff1a; 1、用户目录下的.condarc需要配置&#xff08;自定义环境的地址&#xff08…

1004:最大连续1的个数 III

1004&#xff1a;最大连续1的个数 III 1004&#xff1a;最大连续1的个数 III 给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 1 的最大个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1,0,0,0,1,1,1,1,…

QT quick基础:加载资源文件(字体)

一、加载字体 1、准备字体库 Roboto-Regular.ttf 2、在工程下面新建文件夹fonts&#xff0c;并将字体库放到该文件夹下面。 3、在QT Create 工程中添加字体。 添加现有文件选择Roboto-Regular.ttf。 4、执行qmake 5、在.qml文件加载字体 /* 加载字体 */FontLoader {id: f…

Java8 Stream笔记

什么是Stream&#xff1f; Java 8 中的 Stream 是对数组和集合&#xff08;Collection&#xff09;对象功能的增强&#xff0c; 专注于对集合对象进行各种非常便利、高效的聚合操作&#xff0c;或者大批量数据操作。 Stream的特性&#xff1f; ➢ 不存储数据。Stream 是基于…

Linux批量快速修改文件名的三种方法

在Linux中&#xff0c;批量重命名文件是一项常见且有用的操作。以下是三种常用的批量重命名文件的方法&#xff0c;每种方法都附有示例。这些方法既可以适用于新手&#xff0c;也适用于更有经验的用户。 话不多说&#xff0c;直接上干货&#xff01; rename 命令 rename命令是…

浅谈电动汽车充电站箱变电气安全物联监测系统设计与应用

摘 要:基于物联网技术架构提出了一种适用于电动汽车充电站箱变的电气安全物联监测系统设计方案。该系统由电气安全智能感知设备、通信网关、电气安全物联网监测平台等构成&#xff0c;可支持充电站箱变充电桩出线回路电流、电缆 温度、剩余电流、故障电弧、短路电流等数据采集监…

Swagger的使用

一、引入Maven坐标 <dependency><groupld>com.github.xiaoymin</groupld><artifactld>knife4j-spring-boot-starter</artifactld><version>3.0.2</version> </dependency>二、配置类中添加配置 /*** 通过knife4j生成接口文档…

PagedAttention: from interface to kernal

1 Overview PagedAttention灵感来自于操作系统中虚拟内存和分页的经典思想&#xff0c;它可以允许在非连续空间立存储连续的KV张量。具体来说&#xff0c;PagedAttention把每个序列的KV缓存进行了分块&#xff0c;每个块包含固定长度的token&#xff0c;而在计算attention时可…

自己造messagebox轮子

父组件中&#xff1a; import floatBox from ../messageBox data里加参数alertBox: 0, method中 changeAlertBox() {if (this.alertBox 0) {this.alertBox 1this.$refs.floatBox.changeAlertBox()} else {this.alertBox 0this.$refs.floatBox.changeAlertBox()}console.log…

MCU、MPU、SOC简介

文章目录 前言一、MCU二、MPU三、SOC总结 前言 随着处理器技术的不断发展&#xff0c;CPU(Central Processing Unit)的发展逐渐出现三种分支&#xff0c;分别是MCU(Micro Controller Unit&#xff0c;微控制器单元) 和MPU&#xff08;Micro Processor Unit&#xff0c;微处理器…

Angular系列教程之管道

文章目录 管道的基本概念使用内置管道创建自定义管道总结 在Angular中&#xff0c;管道&#xff08;Pipe&#xff09;是一个非常重要的概念。它们允许我们对数据进行转换、格式化和显示&#xff0c;并且可以轻松地在模板中使用。本篇文章将介绍Angular中的管道概念&#xff0c;…

正则表达式 (用于灵活匹配文本的表达式)

目录 . * . 用于匹配任意单个字符&#xff0c;除了换行符。 例如使用正则表达式 a.b, 它可以匹配aab、acb、a#b * 用于匹配前一个字符零次或多次。 例如&#xff0c;使用正则表达式 ab*c&#xff0c;它可以匹配 "ac"、"abc"、"abbc"&#…

SL3036国产新品 48V/60V电动车里程增程器供电芯片

随着电动车的普及&#xff0c;里程焦虑成为了很多电动车用户面临的问题。为了解决这个问题&#xff0c;SL3036国产新品应运而生&#xff0c;它是一款48V/60V电动车里程增程器供电芯片。这款芯片的出现&#xff0c;为电动车用户提供了更加可靠的续航里程&#xff0c;让他们在出行…

Linux 修改文件名称

创建文件 aaa [root@host144x180 qiao]# touch aaa [root@host144x180 qiao]# ll 总用量 4 -rw-r--r-- 1 root root 0 1月 16 13:57 aaa drwxr-xr-x 3 root root 4096 8月 12 17:14 update修改文件名称 cpmvrename复制 保留源文件:cp 源文件 目标文件[root@host144x18…

LVM逻辑卷扩容

生产环境LVM磁盘扩容 使用df -Th 命令查看磁盘信息 ,可以看到当前LVM逻辑卷容量是38G [rootZ ~]# df -TH 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 38G 2.4G 36G 7% / devtmpfs devtmpfs …

ruoyi 前后端分离学习

1.mybatisconfig 重写了sqlSessionFactory 方法&#xff0c;目前只typeAliasesPackage、mapperLocations、configLocation 新增配置要修改该方法 ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java Beanpublic SqlSessionFactory sqlSessionFacto…