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

Java文件上传解压

目录结构

在这里插入图片描述

工具类

枚举

定义文件类型

public enum FileType {// 未知UNKNOWN,// 压缩文件ZIP, RAR, _7Z, TAR, GZ, TAR_GZ, BZ2, TAR_BZ2,// 位图文件BMP, PNG, JPG, JPEG,// 矢量图文件SVG,// 影音文件AVI, MP4, MP3, AAR, OGG, WAV, WAVE}

为了避免文件被修改后缀,所以这里创建了一个获取文件的真实类型工具类

import com.zipfile.zipenum.FileType;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.IOException;
import java.io.InputStream;@Component
public class fileTypes {public static FileType getFileType(InputStream inputStream){
//        FileInputStream inputStream =null;try{
//            inputStream = new FileInputStream(file);byte[] head = new byte[4];if (-1 == inputStream.read(head)) {return FileType.UNKNOWN;}int headHex = 0;for (byte b : head) {headHex <<= 8;headHex |= b;}switch (headHex) {case 0x504B0304:return FileType.ZIP;case 0x776f7264:return FileType.TAR;case -0x51:return FileType._7Z;case 0x425a6839:return FileType.BZ2;case -0x74f7f8:return FileType.GZ;case 0x52617221:return FileType.RAR;default:return FileType.UNKNOWN;}}catch (Exception e){e.printStackTrace();}finally {try {if(inputStream!=null){inputStream.close();}} catch (IOException e) {e.printStackTrace();}}return FileType.UNKNOWN;}

解压压缩包的工具类


import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;//@Component
public class decompression {/*** 解压缩tar文件* @param file 压缩包文件* @param targetPath 目标文件夹* @param delete 解压后是否删除原压缩包文件*/public static void decompressTar(File file, String targetPath, boolean delete) {try (FileInputStream fis = new FileInputStream(file);TarArchiveInputStream tarInputStream = new TarArchiveInputStream(fis)) {// 创建输出目录Path outputDir = Paths.get(targetPath);if (!Files.exists(outputDir)) {Files.createDirectories(outputDir);}TarArchiveEntry entry;while ((entry = tarInputStream.getNextTarEntry()) != null) {Path entryPath = outputDir.resolve(entry.getName());if (entry.isDirectory()) {Files.createDirectories(entryPath); // 创建子目录} else {Files.createDirectories(entryPath.getParent()); // 确保父目录存在try (OutputStream fos = Files.newOutputStream(entryPath)) {byte[] buffer = new byte[2048];int count;while ((count = tarInputStream.read(buffer)) != -1) {fos.write(buffer, 0, count);}}}}// 如果需要删除原始文件if (delete) {Files.delete(file.toPath());}} catch (IOException e) {e.printStackTrace();}}/*** 解压缩7z文件* @param file 压缩包文件* @param targetPath 目标文件夹* @param delete 解压后是否删除原压缩包文件*//*** 解压 7z 文件** @param file       压缩包文件* @param targetPath 目标文件夹* @param delete     解压后是否删除原压缩包文件*/public static void decompress7Z(File file, String targetPath, boolean delete) {try (SevenZFile sevenZFile = new SevenZFile(file)) { // 自动关闭资源// 创建输出目录Path outputDir = Paths.get(targetPath);if (!Files.exists(outputDir)) {Files.createDirectories(outputDir);}SevenZArchiveEntry entry;while ((entry = sevenZFile.getNextEntry()) != null) {Path entryPath = outputDir.resolve(entry.getName());if (entry.isDirectory()) {Files.createDirectories(entryPath); // 创建子目录} else {Files.createDirectories(entryPath.getParent()); // 确保父目录存在try (OutputStream outputStream = new FileOutputStream(entryPath.toFile())) {byte[] buffer = new byte[2048];int len;while ((len = sevenZFile.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}}}}// 删除原始文件(可选)if (delete) {Files.delete(file.toPath());}} catch (IOException e) {e.printStackTrace();}}/*** 解压 RAR 文件** @param file       压缩包文件* @param targetPath 目标文件夹* @param delete     解压后是否删除原压缩包文件*/public static void decompressRAR(File file, String targetPath, boolean delete) {try (Archive archive = new Archive(file)) { // 自动关闭资源// 创建输出目录Path outputDir = Paths.get(targetPath);if (!Files.exists(outputDir)) {Files.createDirectories(outputDir);}FileHeader fileHeader;while ((fileHeader = archive.nextFileHeader()) != null) {String fileName = fileHeader.getFileNameString().trim();Path filePath = outputDir.resolve(fileName);if (fileHeader.isDirectory()) {Files.createDirectories(filePath); // 创建子目录} else {Files.createDirectories(filePath.getParent()); // 确保父目录存在try (OutputStream outputStream = new FileOutputStream(filePath.toFile())) {archive.extractFile(fileHeader, outputStream);}}}// 如果需要删除原始文件if (delete) {Files.delete(file.toPath());}} catch (RarException | IOException e) {e.printStackTrace();}}/*** 解压 ZIP 文件** @param file       ZIP 文件* @param targetPath 目标文件夹* @param delete     解压后是否删除原压缩包文件*/public static void decompressZIP(File file, String targetPath, boolean delete) {try (InputStream fis = Files.newInputStream(file.toPath());ZipInputStream zipInputStream = new ZipInputStream(fis)) {// 创建输出目录Path outputDir = Paths.get(targetPath);if (!Files.exists(outputDir)) {Files.createDirectories(outputDir);}ZipEntry entry;while ((entry = zipInputStream.getNextEntry()) != null) {Path entryPath = outputDir.resolve(entry.getName());if (entry.isDirectory()) {Files.createDirectories(entryPath); // 创建子目录} else {Files.createDirectories(entryPath.getParent()); // 确保父目录存在try (FileOutputStream fos = new FileOutputStream(entryPath.toFile())) {byte[] buffer = new byte[2048];int len;while ((len = zipInputStream.read(buffer)) != -1) {fos.write(buffer, 0, len);}}}zipInputStream.closeEntry();}// 如果需要删除原始文件if (delete) {Files.delete(file.toPath());}} catch (IOException e) {e.printStackTrace();}}
}

控制层

这里使用接口的方式,接受前端传过来的文件


import com.zipfile.service.ZipService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;@RestController
@RequestMapping("zipUpload/")
public class ZipController {@Autowiredprivate ZipService zipService;@PostMapping("upload")public void zipUpload(@RequestParam("file") MultipartFile file) throws IOException {zipService.upload(file);}}

实现类


import com.zipfile.decompression.decompression;
import com.zipfile.util.fileTypes;
import com.zipfile.zipenum.FileType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;import static com.zipfile.zipenum.FileType.ZIP;@Service
public class ZipServiceImpl implements ZipService {@Autowiredprivate fileTypes fileTypes;@Overridepublic void upload(MultipartFile file) throws IOException {FileType fileType = fileTypes.getFileType(file.getInputStream());System.out.println(fileType);if (fileType == ZIP){// 创建临时文件File tempFile = convertToFile(file);decompression.decompressZIP(tempFile,"E:\\",true);}}private File convertToFile(MultipartFile file) throws IOException {// 获取文件的原始文件名String originalFilename = file.getOriginalFilename();if (originalFilename == null) {throw new IOException("文件名为空!");}// 创建临时文件String prefix = originalFilename.substring(0, originalFilename.lastIndexOf('.'));String suffix = originalFilename.substring(originalFilename.lastIndexOf('.'));File tempFile = File.createTempFile(prefix, suffix);// 将 MultipartFile 的数据写入临时文件file.transferTo(tempFile);return tempFile;}}

依赖包

这是用到的依赖包

  <!-- tar 解压--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.23.0</version></dependency><!--rar解压--><dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>7.5.4</version> <!-- 请根据最新版本选择 --></dependency>

该代码仅实现了zip的解压

相关文章:

Java文件上传解压

目录结构 工具类 枚举 定义文件类型 public enum FileType {// 未知UNKNOWN,// 压缩文件ZIP, RAR, _7Z, TAR, GZ, TAR_GZ, BZ2, TAR_BZ2,// 位图文件BMP, PNG, JPG, JPEG,// 矢量图文件SVG,// 影音文件AVI, MP4, MP3, AAR, OGG, WAV, WAVE}为了避免文件被修改后缀&#xff0…...

人工智能(AI)与机器学习(ML)基础知识

目录 1. 人工智能与机器学习的核心概念 什么是人工智能&#xff08;AI&#xff09;&#xff1f; 什么是机器学习&#xff08;ML&#xff09;&#xff1f; 什么是深度学习&#xff08;DL&#xff09;&#xff1f; 2. 机器学习的三大类型 &#xff08;1&#xff09;监督式学…...

autoware(2)运行自己的数据集

上一节完成了autoware.ai的安装和编译跑通了demo数据集&#xff0c;本将自己录制的数据包用于测试 1.修改点云地图 将加载点云地图的my_map.launch文件复制并命名为my_map_test.launch&#xff0c; &#xff08;1&#xff09;point cloud处替代原来的点云地图为自己的&#…...

HBase Java基础操作

Apache HBase 是一个开源的、分布式的、可扩展的大数据存储系统&#xff0c;它基于 Google 的 Bigtable 模型。使用 Java 操作 HBase 通常需要借助 HBase 提供的 Java API。以下是一个基本的示例&#xff0c;展示了如何在 Java 中连接到 HBase 并执行一些基本的操作&#xff0c…...

巧用观测云可用性监测(云拨测)

前言 做为系统运维或者开发&#xff0c;很多时候我们需要能够实时感知我们所运维的系统和服务的情况&#xff0c;比如以下的场景&#xff1a; 系统上线前测试&#xff1a;包括功能完整性检查&#xff0c;确保页面元素&#xff08;如图像、视频、脚本等&#xff09;都能够正常…...

Chrome离线安装包下载

1、问Chrome的官网&#xff1a;https://www.google.cn/chrome/ 直接下载的是在线安装包&#xff0c;安装需要联网。 2、如果需要在无法联网的设备上安装Chrome&#xff0c;需要在上面的地址后面加上?standalone1。 Chrome离线安装包下载地址&#xff1a;https://www.google.c…...

ceph的RBD管理

0 块设备介绍 Ceph 的块设备&#xff08;Ceph Block Device, RBD&#xff09;是其存储服务的一种实现形式&#xff0c;通过 librbd 库或 Linux 内核模块提供块设备支持&#xff0c;所以可以与主流云平台&#xff08;如 OpenStack&#xff09;、虚拟化平台&#xff08;如 KVM&a…...

【数论】莫比乌斯函数及其反演

文章目录 一、介绍二、莫比乌斯函数的算法求解三、例题 在学习之前&#xff0c;先来了解一下常见定义吧&#xff08;OVO&#xff09;&#xff1a; 常见数论函数分为两种&#xff1a; { 完全积性函数&#xff1a;对于任意 p , q ∈ N &#xff0c;有 f ( p ⋅ q ) f ( p ) ⋅ …...

低音运行,约克VRF中央空调让居家生活静享安宁

不仅节能省电&#xff0c;约克VRF中央空调还特别注重运行的静音效果&#xff0c;低至17dB超低运行噪音&#xff0c;让你在享受舒适环境的同时&#xff0c;也能拥有宁静的居家氛围。无论是工作、学习还是休息&#xff0c;都不受噪音干扰。...

使用 Ansys LS-DYNA 进行玻璃瓶包装跌落分析

使用 Ansys LS-DYNA 进行玻璃瓶包装跌落分析 玻璃瓶包装跌落分析 使用两个玻璃瓶&#xff0c;其中一个为纸盒包装&#xff0c;用来演示包装效果。 Johnson–Holmquist 损伤模型用于玻璃 (MAT_JOHNSON_HOLMQUIST_CERAMICS)纸箱包装采用各向同性弹性材料模型。瓶子将从 300 毫米…...

Windows系统编程 - 进程遍历

文章目录 前言进程的遍历CreateToolhelp32SnapshotProcess32FirstProcess32Next进程遍历 总结 前言 各位师傅好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解进程遍历的相关知识点 进程的遍历 快照&#xff1a;使用vmware虚拟机的时候&#xff0c;经常需要配置环境服务…...

【电路笔记 TMS320F28335DSP】时钟+看门狗+相关寄存器(功能模块使能、时钟频率配置、看门狗配置)

时钟源和主时钟&#xff08;SYSCLKOUT&#xff09; 外部晶振&#xff1a;通常使用外部晶振&#xff08;如 20 MHz&#xff09;作为主要时钟源。内部振荡器&#xff1a;还可以选择内部振荡器&#xff08;INTOSC1 和 INTOSC2&#xff09;&#xff0c;适合无需高精度外部时钟的应…...

gt730是什么显卡?gt730显卡性能参数介绍

NVIDIA GeForce GT 730是一款入门级图形卡&#xff0c;于2014年推出&#xff0c;基于40纳米工艺和GF108图形处理器。尽管它支持DirectX 12&#xff0c;但功能级别仅为11_0&#xff0c;这可能会在新的DirectX 12标题中造成问题。GT 730具有96个着色单元&#xff0c;16个纹理映射…...

Swift内存访问冲突

内存的访问&#xff0c;发生在给变量赋值的时候&#xff0c;或者传递值&#xff08;给函数&#xff09;的时候&#xff0c;例如 var one 1//向one的内存区域发起一次写的操作 print("\(one)")//向one的内存区域发起一次读的操作 在 Swift 里&#xff0c;有很多修改…...

2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索

Enhancing Medical Image Retrieval with UMLS-Integrated CNN-Based Text Indexing 问题 医疗图像检索中&#xff0c;图像与相关文本的一致性问题&#xff0c;如患者有病症但影像可能无明显异常&#xff0c;影响图像检索系统准确性。传统的基于文本的医学图像检索&#xff0…...

力扣刷题--21.合并两个有序链表

I am the best &#xff01;&#xff01;&#xff01; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2…...

Diving into the STM32 HAL-----DAC笔记

根据所使用的系列和封装&#xff0c;STM32微控制器通常只提供一个具有一个或两个专用输出的DAC&#xff0c;除了STM32F3系列中的少数零件编号实现两个DAC&#xff0c;第一个具有两个输出&#xff0c;另一个只有一个输出。STM32G4 系列的一些较新的 MCU 甚至提供多达 5 个独立的…...

每日一题 LCR 078. 合并 K 个升序链表

LCR 078. 合并 K 个升序链表 使用二分法就可以解决 class Solution { public:ListNode* mergeKLists(vector<ListNode*>& lists) {int n lists.size();if(n 0){return nullptr;}ListNode* ans ;ans binMerge(lists,0,n-1);return ans;}ListNode* binMerge(vector…...

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 &#xff08;一&#xff09;分布式锁&#xff1a;应对分布式环境的同步挑战 &#xff08;二&#xff09;分布式锁的实现方式 &#xff08;三&#xff09;分布式锁的使用场景 &#xff08;四&#xff09;分布式锁需满足的特点 二、Redis 实现分…...

如何利用java爬虫获得淘宝商品评论

在当今数字化时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是对于电商平台而言&#xff0c;商品评论作为用户反馈的重要载体&#xff0c;蕴含着丰富的信息。本文将详细介绍如何利用Java爬虫技术获取淘宝商品评论&#xff0c;包括代码示例和关键步骤解析。 淘宝商品评论的…...

SQLAlchemy,ORM的Python标杆!

嗨&#xff0c;Python的小伙伴们&#xff01;今天咱们来了解 SQLAlchemy&#xff0c;这可是对象关系映射&#xff08;ORM&#xff09;里的超级标杆哦&#xff01;它就像一座神奇的桥梁&#xff0c;能让我们用 Python 代码轻松地和数据库打交道&#xff0c;不用写复杂的 SQL 语句…...

时序论文23|ICML24谷歌开源零样本时序大模型TimesFM

论文标题&#xff1a;A DECODER - ONLY FOUNDATION MODEL FOR TIME - SERIES FORECASTING 论文链接&#xff1a;https://arxiv.org/abs/2310.10688 论文链接&#xff1a;https://github.com/google-research/timesfm 前言 谷歌这篇时间序列大模型很早之前就在关注&#xff…...

java http body的格式 ‌application/x-www-form-urlencoded‌不支持文件上传

在Java中&#xff0c;HTTP请求的body部分可以包含多种格式的数据&#xff0c;主要包括以下几种‌&#xff1a; ‌application/x-www-form-urlencoded‌&#xff1a;这种格式将数据编码成键值对的形式&#xff0c;键和值都进行了URL编码&#xff0c;键值对之间用&符号连接。…...

【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】

头歌实训&#xff1a;利用kmp算法求子串在主串中不重叠出现的次数 文章目录 任务描述编程要求测试说明输入格式输出格式样例输入1样例输出1样例输入2样例输出2 源代码&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序&#xff0c;利用kmp算法求子串在主串中不重叠出现…...

WPF动画

在 WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;主要有两种类型的动画&#xff1a;属性动画&#xff08;Property Animation&#xff09;和关键帧动画&#xff08;Key - Frame Animation&#xff09;。属性动画用于简单地从一个起始值平滑地过渡…...

Kafka 分区分配及再平衡策略深度解析与消费者事务和数据积压的简单介绍

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...

如何在 UniApp 中实现 iOS 版本更新检测

随着移动应用的不断发展&#xff0c;保持应用程序的更新是必不可少的&#xff0c;这样用户才能获得更好的体验。本文将帮助你在 UniApp 中实现 iOS 版的版本更新检测和提示&#xff0c;适合刚入行的小白。我们将分步骤进行说明&#xff0c;每一步所需的代码及其解释都会一一列出…...

Android 14.0 kenel中修改rom系统内部存储的大小

1. 前言 在14.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分…...

JavaScript 函数

JavaScript中也可以使用函数&#xff0c;但是使用的方法有些不同&#xff1b;需要使用function关键字定义一个函数&#xff08;或者使用匿名函数或者箭头函数&#xff09;。但是需要特别注意的是&#xff1a;在类中定义函数时&#xff0c;一定不可以使用箭头函数&#xff0c;因…...

js+new Date()+moment+时区

文章目录 概要一、Date对象基础知识1. 创建Date对象2. 获取日期和时间信息3. 设置日期和时间 二、Date对象的应用1. 日期格式化2. 时间差计算3. 倒计时功能 moment.jsmoment 常见场景应用时区差别亚洲欧洲美洲大洋洲 时区时间说明 概要 一、Date对象基础知识 1. 创建Date对象…...

OpenCV、YOLO、VOC、COCO之间的关系和区别

OpenCV、YOLO、COCO 和 VOC 是计算机视觉和深度学习领域常见的几个名词&#xff0c;它们分别代表不同的工具、算法和数据集&#xff0c;之间有一些联系和区别。下面分别说明它们的定义、用途以及相互关系。 1. OpenCV&#xff08;Open Source Computer Vision Library&#xf…...

迁移学习理论与应用

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习技术&#xff0c;旨在将一个任务&#xff08;源任务&#xff09;上学到的知识迁移到另一个相关但不完全相同的任务&#xff08;目标任务&#xff09;上&#xff0c;从而提高目标任务的学习效果。这种方法的核心…...

Python-简单病毒程序合集(一)

前言&#xff1a;简单又有趣的Python恶搞代码&#xff0c;往往能给我们枯燥无味的生活带来一点乐趣&#xff0c;激发我们对编程的最原始的热爱。那么话不多说&#xff0c;我们直接开始今天的编程之路。 编程思路&#xff1a;本次我们将会用到os,paltform,threading,ctypes,sys,…...

AI安全:从现实关切到未来展望

近年来&#xff0c;人工智能技术飞速发展&#xff0c;从简单的图像识别到生成对话&#xff0c;从自动驾驶到医疗诊断&#xff0c;AI技术正深刻改变着我们的生活。然而&#xff0c;伴随着这些进步&#xff0c;AI的安全性和可控性问题也日益凸显。这不仅涉及技术层面的挑战&#…...

集成金蝶云星空数据至MySQL的完整案例解析

金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化系统中&#xff0c;数据的高效流动和准确同步是确保业务连续性和决策支持的重要环节。本文将聚焦于一个具体的系统对接集成案例——金蝶云星空的数据集成到MySQL&#xff0c;方案名称为“2金蝶物料同步到商城中间表”。 …...

C++格式化输入输出【练习版】

一、引言 在 C 编程中&#xff0c;准确地进行输入输出操作是构建功能强大且用户友好程序的关键。格式化输入输出允许我们以特定的格式展示数据&#xff0c;确保数据的可读性和准确性。本文将深入探讨 C 的格式化输入输出&#xff0c;通过丰富的练习例题和详细的答案解析&#x…...

aws服务(二)机密数据存储

在AWS&#xff08;Amazon Web Services&#xff09;中存储机密数据时&#xff0c;安全性和合规性是最重要的考虑因素。AWS 提供了多个服务和工具&#xff0c;帮助用户确保数据的安全性、机密性以及合规性。以下是一些推荐的存储机密数据的AWS服务和最佳实践&#xff1a; 一、A…...

CIO40: 回头再看ERP之“4问”

1、在数字化时代的今天&#xff0c;ERP现在的定位是&#xff1f; ERP软件财务化&#xff0c;我觉得是一个趋势&#xff0c;但是短期内&#xff08;2-3年&#xff09;ERP依然是企业的核心系统。这要看企业外部系统的建设情况&#xff0c;ERP系统的使用深度&#xff08;特别是一些…...

数据库类型介绍

1. 关系型数据库&#xff08;Relational Database, RDBMS&#xff09;&#xff1a; • 定义&#xff1a;基于关系模型&#xff08;即表格&#xff09;存储数据&#xff0c;数据之间通过外键等关系相互关联。 • 特点&#xff1a;支持复杂的SQL查询&#xff0c;数据一致性和完整…...

深入理解 Spring Boot 的 CommandLineRunner 原理及使用

引言 在开发 Spring Boot 应用程序时&#xff0c;我们经常需要在应用程序启动后执行一些初始化任务&#xff0c;比如加载初始数据、连接外部服务、执行健康检查等。Spring Boot 提供了 CommandLineRunner 接口&#xff0c;使得这些任务的实现变得非常简单和直观。本文将深入探…...

人工智能深度学习-Torch框架-数学运算

数学的基本操作 1.floor&#xff1a;向下取整 2.celi&#xff1a;向上取整 3.round&#xff1a;四舍五入&#xff0c;这里的四舍五入还要看前面整数的奇偶性&#xff0c;基进偶不进 4.trunc&#xff1a;只保留整数 5.frac&#xff1a;只保留小数部分 6.fix&#xff1a;向…...

操作系统的理解

目录 一、冯伊诺曼体系结构 二、操作系统的概念 三、如何理解“管理”&#xff1f; 四、系统调用和库调用的概念 一、冯伊诺曼体系结构 冯伊诺曼体系结构描述的是计算机硬件结构&#xff0c;相当于计算机的骨架。它大体可以分为4部分&#xff1a; 输入设备&#xff1a;键盘…...

SpringDataNeo4j使用详解

SDN快速入门 Spring Data Neo4j简称SDN&#xff0c;是Spring对Neo4j数据库操作的封装&#xff0c;其底层基于neo4j-java-driver实现。 我们使用的版本为&#xff1a;6.2.3&#xff0c;官方文档&#xff1a; 下面我们将基于项目中的运输路线业务进行学习&#xff0c;例如&#…...

undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12 问题解决

​ 在部署运行opencompass项目时遇到了如下报错&#xff1a; ImportError: /data/conda/envs/opencompass/lib/python3.10/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12​…...

记一次:软著申请

前言&#xff1a;公司每年都有申请软著或者发明&#xff0c;可惜没有我的名字&#xff0c;没关系&#xff0c;我可以按个人的名义去申请一个&#xff0c;于是乎就有了这篇文章。话不多说&#xff0c;展示 之前还犹豫要不要发表一下&#xff0c;经过朋友的劝说&#xff0c;自己的…...

IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发

对于新手学习SpringBoot开发&#xff0c;可能最急迫的事情就是尽快掌握数据库的开发。目前数据库开发主要流行使用Mybatis和Mybatis Plus,不过这2个框架对于新手而言需要一定的时间掌握&#xff0c;如果快速上手数据库开发&#xff0c;可以先按照本文介绍的方式使用JdbcTemplat…...

筑起数字堡垒:解析AWS高防盾(Shield)的全面防护能力

引言 在数字化时代&#xff0c;网络攻击的频率和复杂性持续增加。分布式拒绝服务&#xff08;DDoS&#xff09;攻击成为威胁在线业务的主要手段之一。AWS推出的高防盾&#xff08;AWS Shield&#xff09;是一项专注于DDoS防护的服务&#xff0c;帮助用户保护其应用程序和数据免…...

python语言基础

1. 基础语法 Q: Python 中的变量与数据类型有哪些&#xff1f; A: Python 支持多种数据类型&#xff0c;包括数字&#xff08;整数 int、浮点数 float、复数 complex&#xff09;、字符串 str、列表 list、元组 tuple、字典 dict 和集合 set。每种数据类型都有其特定的用途和…...

vue2 src_Todolist编辑($nextTick)

main.js //引入Vue import Vue from "vue"; //引入App import App from ./App;//关闭Vue的生产提示 Vue.config.productionTip false;new Vue({el: #app,render: h > h(App),beforeCreate() {//事件总线Vue.prototype.$bus this;} });App.vue <template>…...

复习!!!

前言&#xff1a; 今天好像没有复习什么&#xff0c;对了&#xff0c;老师让我们写作业来着 那个乌云漏洞网站真的好啊&#xff0c;虽然很老&#xff0c;但是有思路啊 乌云(WooYun.org)历史漏洞查询---http://WY.ZONE.CI 复习&#xff1a; 今天主要复习了nuclei工具的用法…...