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

【SpringMVC文件上传终极指南:从基础配置到云存储集成】

在这里插入图片描述

🎥博主:程序员不想YY啊
💫CSDN优质创作者,CSDN实力新星,CSDN博客专家
🤗点赞🎈收藏⭐再看💫养成习惯
✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

在这里插入图片描述

SpringMVC 文件上传基础概念

1、 文件上传原理

文件上传本质上是客户端将本地文件数据通过 HTTP 协议发送到服务器端的过程,在 SpringMVC 中,当浏览器发起文件上传请求时,请求数据会按照特定格式进行封装,SpringMVC 通过相关组件解析请求,将文件数据保存到服务器指定位置 。

2、必备依赖

在使用 SpringMVC 进行文件上传前,需要在项目的构建文件(如 Maven 的pom.xml)中添加相关依赖,主要依赖有 SpringMVC 核心依赖和文件上传组件依赖,以 Maven 项目为例:

<dependencies><!-- SpringMVC核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.10</version></dependency><!-- 文件上传组件,常用的是commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency>
</dependencies>

其中,commons-fileupload组件负责处理文件上传的具体操作,它依赖于commons-io组件,Maven 会自动解析并下载所需依赖。

SpringMVC文件上传核心原理

1、技术栈全景图

在这里插入图片描述

2、核心组件解析

  • MultipartResolver: 请求解析引擎(Apache Commons vs Servlet 3.0+)
  • MultipartFile: Spring封装的文件操作接口
  • 临时存储: 服务器内存或系统临时目录(需及时清理)

全版本环境配置(含Spring Boot)

1、Maven依赖(传统Spring项目)

<!-- Apache Commons FileUpload -->
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.5</version>
</dependency><!-- Servlet 3.0+ 容器(Tomcat 8+) -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
</dependency>

2、Spring Boot自动化配置

# application.yml 关键配置
spring:servlet:multipart:max-file-size: 50MBmax-request-size: 100MBlocation: /tmp/uploads # 临时目录resolve-lazily: false # 是否延迟解析

SpringMVC文件上传的示例代码

1. 创建一个上传文件的HTML表单:
<form action="/upload" method="post" enctype="multipart/form-data"><input type="file" name="file" /><input type="submit" value="Upload" />
</form>
2. 创建一个UploadController来处理文件上传请求:
@Controller
public class UploadController {@PostMapping("/upload")public String uploadFile(@RequestParam("file") MultipartFile file) {// 检查文件是否为空if (file.isEmpty()) {return "redirect:/error";}try {// 获取文件名String fileName = file.getOriginalFilename();// 获取文件的字节数据byte[] bytes = file.getBytes();// 文件保存路径String filePath = "/path/to/save/" + fileName;// 将文件保存到指定路径Files.write(Paths.get(filePath), bytes);return "redirect:/success";} catch (IOException e) {e.printStackTrace();return "redirect:/error";}}
}
3. 创建一个DownloadController来处理文件下载请求:
@Controller
public class DownloadController {@GetMapping("/download")public ResponseEntity<Resource> downloadFile() {// 文件路径String filePath = "/path/to/file";// 创建文件对象File file = new File(filePath);// 创建文件资源对象Resource resource = new FileSystemResource(file);// 设置响应头HttpHeaders headers = new HttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName());return ResponseEntity.ok().headers(headers).contentLength(file.length()).contentType(MediaType.APPLICATION_OCTET_STREAM).body(resource);}
}
请注意,上述代码中的文件保存路径和下载文件路径需要根据实际情况进行修改

1、表单准备(前端关键代码)

<form action="/upload" method="post" enctype="multipart/form-data"><input type="file" name="file" multiple> <!-- 多文件支持 --><input type="text" name="description"><button type="submit">上传</button>
</form>

2、控制器实现(单文件+多文件)

@PostMapping("/upload")
public String handleUpload(@RequestParam("file") MultipartFile file,@RequestParam("description") String desc,RedirectAttributes redirectAttributes) {if (file.isEmpty()) {redirectAttributes.addFlashAttribute("message", "请选择文件");return "redirect:/status";}try {// 安全存储路径(防止路径穿越攻击)Path safePath = Paths.get("/secure-upload").resolve(Paths.get(file.getOriginalFilename()).normalize());Files.copy(file.getInputStream(), safePath, StandardCopyOption.REPLACE_EXISTING);redirectAttributes.addFlashAttribute("message", "上传成功: " + file.getOriginalFilename());} catch (IOException e) {redirectAttributes.addFlashAttribute("message", "上传失败: " + e.getMessage());}return "redirect:/status";
}// 多文件上传
@PostMapping("/multi-upload")
public String multiUpload(@RequestParam("files") MultipartFile[] files) {Arrays.stream(files).forEach(this::saveFile);return "redirect:/status";
}

导入依赖的包

在pom.xml文件中导入依赖的包:

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version>
</dependency>

配置文件上传解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 --><property name="defaultEncoding" value="UTF-8"></property><!-- 文件最大大小(字节) 1024*1024*50=50M--><property name="maxUploadSize" value="52428800"></property><!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常--><property name="resolveLazily" value="true"/></bean>

数据表

create table t_book_file
(file_id varchar(32) primary key comment '文件ID',real_name varchar(50) not null comment '文件名称',content_type varchar(50) not null comment '文件类型',url varchar(256) not null comment '文件路径'
);

在book表中加入一个字段来保存上传文件的ID,即:与file_id字段对应。

controller

在这里插入图片描述
编辑index.jsp
增加上传链接打开进入上传的页面
在这里插入图片描述
上传页面
在这里插入图片描述
该截图中的代码只是保存了图片,还需要将图片的信息保存到文件数据表中,请自行完善。

下载

核心代码:

@RequestMapping(value="/download")
public ResponseEntity<byte[]> download(@RequestParam String fileId){//先根据文件id查询对应图片信息,相关的后台代码省略,自行编写//下载关键代码File file=new File(bookFile.getUrl());HttpHeaders headers = new HttpHeaders();//http头信息String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码headers.setContentDispositionFormData("attachment", downloadFileName);headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);//MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);}

下载功能链接,示例代码

<!-- 判断是否 存在图片,如果有图片则提供下载 -->
<c:if test="${not empty b.bookImages}">    <a href="${ctx}/bookFile/download?fileId=${b.bookImages}">下载图片</a>
</c:if>

高级功能扩展

1、文件校验拦截器

@Component
public class FileTypeInterceptor implements HandlerInterceptor {private static final Set<String> ALLOWED_TYPES = Set.of("image/jpeg", "image/png", "application/pdf");@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (request instanceof MultipartHttpServletRequest) {MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;multiRequest.getFileMap().forEach((name, file) -> {if (!ALLOWED_TYPES.contains(file.getContentType())) {throw new IllegalArgumentException("禁止的文件类型: " + file.getContentType());}});}return true;}
}

2、云存储集成(以阿里云OSS为例)

@Bean
public OSS ossClient() {return new OSSClientBuilder().build("oss-cn-beijing.aliyuncs.com","<your-access-key>","<your-secret-key>");
}@PostMapping("/oss-upload")
public String uploadToOSS(@RequestParam("file") MultipartFile file) {try {ossClient().putObject("your-bucket", "uploads/" + UUID.randomUUID() + getFileExtension(file),file.getInputStream());return "redirect:/success";} catch (IOException e) {throw new RuntimeException("OSS上传失败", e);}
}

生产级最佳实践

1、安全防护策略

风险类型防御措施实现示例
路径穿越文件名规范化校验Paths.get(name).normalize()
超大文件限制最大文件尺寸@MaxFileSize(100MB)
恶意类型白名单校验Content-Type拦截器检查MIME类型
重复攻击客户端秒传(文件哈希校验)MD5文件摘要比对

2、性能优化技巧

  • 异步上传: 结合@Async与CompletableFuture
  • 分片上传: 前端WebUploader + 后端断点续传接口
  • CDN加速: 上传后自动刷新CDN缓存
  • 分布式文件存储: 在大型项目中,单机存储可能无法满足需求,此时可以考虑使用分布式文件存储系统,如 FastDFS、MinIO 等。将文件上传到分布式存储系统后,服务器只保存文件的访问地址,这样既提高了存储容量,又增强了系统的可扩展性和可靠性。

常见问题

1、上传失败提示“临时目录不可写”

  • 检查spring.servlet.multipart.location权限
  • Linux执行:chmod 777 /tmp/uploads

2、中文文件名乱码

# 在spring配置中增加
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true

3、如何获取上传进度?

  • 前端:XMLHttpRequest的progress事件
  • 后端:实现CommonsMultipartResolver的进度监听接口

4、Spring Boot下配置不生效?

  • 确认依赖是否包含spring-boot-starter-web
  • 检查是否有自定义MultipartConfigElement Bean覆盖默认配置

5、文件大小限制问题

在实际应用中,可能会遇到文件大小超出配置限制的情况。除了在CommonsMultipartResolver中设置maxUploadSize外,还需要注意 Tomcat 等服务器对请求大小的限制。以 Tomcat 为例,可以在server.xml文件中修改相关配置:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxPostSize="10485760" />

通过设置maxPostSize参数(单位为字节),可以调整 Tomcat 允许接收的最大 POST 请求大小,避免因文件过大导致上传失败。

6、文件名重复问题

当多个用户上传相同文件名的文件时,可能会出现覆盖现象,为避免这种情况,可以在保存文件时对文件名进行处理,例如添加时间戳或随机字符串,修改后的保存文件代码如下:

import java.util.UUID;
//...
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String newFileName = uuid + "_" + fileName;
File targetFile = new File(filePath, newFileName);
file.transferTo(targetFile);

通过生成唯一的 UUID 并与原文件名拼接,确保每个上传文件都有唯一的文件名。

7、文件类型限制问题

为了保证系统安全和数据规范,有时需要限制上传文件的类型。可以通过判断文件扩展名的方式实现,示例代码如下:

String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);
if (!"jpg".equals(fileExtension) &&!"png".equals(fileExtension) &&!"pdf".equals(fileExtension)) {modelAndView.addObject("message", "只允许上传jpg、png、pdf格式的文件");modelAndView.setViewName("result");return modelAndView;
}

上述代码判断文件扩展名是否在允许的范围内,如果不在则返回错误提示信息。

测试与调试技巧

1、Postman测试脚本

// 在Postman的Tests标签页添加
pm.test("Upload Success", function() {pm.response.to.have.status(200);pm.expect(pm.response.text()).to.include("success");
});

2、JUnit单元测试

@SpringBootTest
@AutoConfigureMockMvc
class FileUploadTest {@Autowiredprivate MockMvc mockMvc;@Testvoid testUpload() throws Exception {MockMultipartFile file = new MockMultipartFile("file", "test.txt", "text/plain", "Hello World".getBytes());mockMvc.perform(multipart("/upload").file(file).param("description", "test case")).andExpect(status().is3xxRedirection()).andExpect(redirectedUrl("/status"));}
}

总结

1、核心要点回顾:

  • 正确配置MultipartResolver是基础
  • 安全校验与异常处理不可忽视
  • 云存储是生产环境推荐方案

2、推荐工具:

  • Postman文件上传测试教程
  • 阿里云OSS Java SDK文档

全面了解了 SpringMVC 文件上传的原理、实现步骤、常见问题及解决方案,以及相关的优化和扩展方法,掌握 SpringMVC 文件上传技术,能够为 Web 应用开发增添实用且强大的功能。

相关文章:

【SpringMVC文件上传终极指南:从基础配置到云存储集成】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

windows安装docker教程

1、参考博客 - 安装教程&#xff1a; https://blog.csdn.net/GoodburghCottage/article/details/131413312 - docker详解&#xff1a; https://www.cnblogs.com/yaok430/p/16738002.html 2、设计目标 - 提供一个简单的应用程序打包工具&#xff0c;可以将应用程序…...

基于物理信息的神经网络在异常检测Anomaly Detection中的应用:实践指南

物理信息神经网络(PINNs)代表了一种令人兴奋的新建模范式,这种范式正在各行各业迅速崭露头角。 PINNs 最有前景的应用之一是复杂物理系统中的异常检测Anomaly Detection。这一应用尤其值得关注,因为它解决了传统机器学习方法在实践中一直难以克服的几个关键痛点。 在这篇…...

Spark阶段学习总结

一、Spark 是什么 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎&#xff0c;也可说是分布式内存迭代计算框架。 二、Spark 四大特点 速度快&#xff08;内存计算&#xff09; 易于使用 通用性强 运行方式多 三、与hadoop的核心差异 数据通信&#xf…...

统信操作系统使用默认yum源安装 Docker 的踩坑

事件 在使用 docker 运行 es 的时候&#xff0c;es 报错 ulimit 的值为1024&#xff0c;但是服务器已经设置成了65535。 排查结果 在装完 docker 之后发现 docker systemd 的启动命令引用了 /etc/sysconfig/docker 这个文件里面设定了 ulimit 为 1024 如下&#xff1a; [ro…...

HK1RBOX K8 RK3528 Via浏览器_插件_央视频的组合验证(失败)

文章目录 前言软件和设备信息过程方案插件代码 运行效果问题 前言 实践的结果为失败,设备性能不满足, 无法流畅播放视频 软件和设备信息 via浏览器, 版本4.9.1HK1RBOX K8 RK3528设备win10, 逍遥游安卓虚拟机(开发插件)央视频官网(不是cctv那个) 过程 方案 浏览器设置央视…...

XMOS直播声卡——可支持实时音频DSP处理的低延迟音频方案

对于游戏玩家和短视频直播工作者来说&#xff0c;声卡不可或缺。它除了能将计算设备的数字信号转换为声音信号&#xff0c;还能够提供各种逼真的或者定制的3D音效&#xff0c;提升游戏的沉浸感&#xff0c;特别是在大型开放联网游戏或射击游戏中&#xff0c;声音细节直接影响玩…...

DB2备份恢复操作文档及其注意事项

备份BACKUP 备份语法&#xff1a; 在线备份&#xff1a;db2 backup db MYDB online to /tmp/backup_db2_20250326 离线备份&#xff1a;db2 backup db MYDB to /tmp/backup_db2_20250326 需要注意&#xff0c;在执行在线备份时需要开启归档&#xff0c;即执行db2 get db cfg f…...

flask uri 怎么统一加前缀

在 Flask 中为 URI 统一添加前缀&#xff0c;可以通过多种方式实现&#xff0c;下面为你详细介绍几种常见的方法。 方法一&#xff1a;使用 Blueprint&#xff08;推荐&#xff09; Blueprint&#xff08;蓝图&#xff09;是 Flask 中组织路由的一种方式&#xff0c;它可以将…...

创建一个springboot的项目-简洁步骤

1. 打开IDEA&#xff0c;新建项目&#xff1a; 2. 设置项目的基本信息&#xff0c;其中注意jdk版本要与Java版本匹配&#xff0c;这里使用jdk17和java17 3. 选择SpringBoot版本&#xff0c;选择项目依赖&#xff08;依赖也可以创建完项目后在pom文件中修改&#xff09; 这里选…...

杭电oj(1008、1012、1013、1014、1017)题解

目录 ​编辑 1008 题目 思路 代码 1012 题目 思路 代码 1013 题目 思路 代码 1014 题目 思路 代码 1017 题目 思路 处理每组测试数据 计算满足条件的整数对数量 代码 1008 题目 思路 s a[0];&#xff1a;初始化 s 为数组的第一个元素&#xff0c;即电…...

VRRP与BFD在冗余设计中的核心区别:从“备用网关”到“毫秒级故障检测”

&#xff08;本文完全由deepseek生成&#xff0c;特此声明&#xff09; 在网络冗余设计中&#xff0c;VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;和BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是两种关键协议&#xff0c;但它们的定…...

蓝桥杯 2. 确定字符串是否是另一个的排列

确定字符串是否是另一个的排列 原题目链接 题目描述 实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。 排列的解释如下&#xff1a;如果将 str1 的字符拆分开&#xff0c;重新排列后再拼接起来&#xff0c;能够得到 str2&#xff0c;那么就说字符串 st…...

巧记英语四级单词 Unit6-上【晓艳老师版】

master n.雇主&#xff0c;主人 发音“骂死他”&#xff0c;骂死谁&#xff1f;雇主&#xff0c;主人masterpiece n.代表作&#xff0c;名著 主人的作品就是名著deputy n.副手 de表示往下&#xff0c;put放&#xff0c;往下放给副手appeal n.要求&#xff0c;呼吁 一再的要求剥…...

Java求职面试:从Spring Boot到微服务架构的全面解析

场景&#xff1a;互联网大厂Java面试 在某互联网大厂的面试房间里&#xff0c;面试官李老师正准备面试一位传说中的“水货程序员”——谢飞机。 第一轮提问&#xff1a;基础框架与工具 李老师&#xff1a; “谢飞机&#xff0c;你好。我们先聊聊Spring Boot吧。你能简单说说…...

来自B站AIGC科技官的“vLLM简介“视频截图

来自B站AIGC科技官的"vLLM简介"视频截图 0. 引言1. vLLM简介2. vLLM启动日志解析3. vLLM压力测试4.vLLM分布式推理 0. 引言 这篇文章主要记录了B站AIGC科技官的"vLLM简介"视频截图。 1. vLLM简介 笔记 From Up主&#xff1a; KV Cache的大小与序列长度的…...

CSS元素动画篇:基于当前位置的变换动画(四)

基于当前位置的变换动画&#xff08;四&#xff09; 前言透明效果类元素动画闪烁动画效果效果预览代码实现 淡入动画效果效果预览代码实现 淡出动画效果效果预览代码实现 结语 前言 CSS元素动画一般分为两种&#xff1a;一种是元素基于当前位置的变换动画&#xff0c;通过不明…...

如何打包一个QT 程序

如何打包一个QT 程序 找到 vcvarsall.bat 文件 打开 图中框选的命令行 输入命令 D:\MicrosoftVisualStdio2022\Community\VC\Auxiliary\Build\vcvarsall.bat x64命令行进入待打包的目录&#xff0c;只留下一个exe 文件即可 windeployqt 程序名打包完成...

【vLLM 学习】CPU 离线处理

vLLM 是一款专为大语言模型推理加速而设计的框架&#xff0c;实现了 KV 缓存内存几乎零浪费&#xff0c;解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ 源代码&#xff1a;vllm-project/vllm from vllm import LLM, SamplingParams# S…...

德州仪器(TI)—TDA4VM芯片详解—目录

写在前面 本系列文章主要讲解德州仪器&#xff08;TI&#xff09;TDA4VM芯片的相关知识&#xff0c;希望能帮助更多的同学认识和了解德州仪器&#xff08;TI&#xff09;TDA4VM芯片。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 本篇是此系列的目录…...

深入解读:2025 数字化转型管理 参考架构

《GB/T 45341—2025 数字化转型管理 参考架构》规定了数字化转型参考架构&#xff0c;涵盖主要视角、过程方法、发展阶段与水平档次。主要视角包含发展战略、业务创新转型等 5 个方面&#xff0c;明确任务及关联&#xff1b; 过程方法基于 “策划 — 支持、实施与运行 — 评测 …...

dma_buf学习记录之二核心接口

dma_buf学习记录之一基础知识-CSDN博客 本章学习linux\include\linux\dma-buf.h dma-buf.h 是 Linux 内核中用于实现 DMA 缓冲区共享框架的核心头文件。它定义了 dma-buf 子系统的主要数据结构和操作接口&#xff0c;允许设备驱动程序之间共享缓冲区&#xff0c;并支持异步硬件…...

java Optional

我还没用过java8的一些语法&#xff0c;有点老古董了&#xff0c;记录下Optional怎么用。 从源码看&#xff0c;Optional内部持有一个对象&#xff0c; 有一些api对这个对象进行判空处理。 静态方法of &#xff0c;生成Optional对象&#xff0c; 但这个value不能为空&#…...

一文说清Token这个大模型中的数字乐高积木的作用

第一章&#xff1a;语言解码的底层逻辑 1.1 人类大脑的"偷懒智慧" 想象你走在街头&#xff0c;突然看到"星巴克"的招牌。你的大脑不会逐个分析"星""巴""克"三个字的笔画&#xff0c;而是瞬间将其识别为一个整体。这种将高…...

界面打印和重定向同时实现

在 Shell 中&#xff0c;若要让程序运行时既在界面打印输出内容&#xff0c;又将其重定向到文件&#xff0c;可使用tee命令达成此目的。tee命令的作用是从标准输入读取数据&#xff0c;然后将这些数据同时输出到标准输出&#xff08;也就是屏幕&#xff09;和指定的文件中。 基…...

最佳实践-HENGSHI SENSE 可视化创作中如何引入数据集市的成果

HENGSHI SENSE 提供了 中心化的数据集市管理 &#xff0c;即数据集市的功能&#xff1a; 数据集市&#xff0c;支持层级结构的数据集市建立&#xff0c;按用户&#xff0c;用户组&#xff0c;组织架构授权&#xff0c;将数据分配到合适的人。支持统一的计算字段&#xff0c;计算…...

YOLO旋转检测模型简化

YOLO模型作为单阶段目标检测方法的代表&#xff0c;其已经应用在多个领域。 但要想将其部署到单片机上&#xff0c;其模型的大小需要受到极大的限制&#xff0c;而采用剪枝的方式模型体积下降效果有限&#xff0c;因此我们直接修改网络结构&#xff0c;将其进行删减&#xff0c…...

JavaScript之Webpack的模块加载机制

目录 目标 概述 IIFE语法分析 无参数的IIFE 有参数的IIFE Webpack语法分析 基本结构 缓存加载过的模块 ES5的格式 ES6的格式 目标 本文站在js逆向的角度总结知识&#xff0c;所以不讲解Webpack打包技术&#xff0c;只分析模块加载机制。 概述 Webpack Webpack是一个…...

深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus

在视频和音频分析领域&#xff0c;如何高效地处理和检索海量的多模态数据一直是一个重大挑战。本文将深度解析一种行之有效的解决方案&#xff1a;利用 OpenCV 和音频处理库提取数据特征后&#xff0c;将这些特征向量存储到 Milvus 向量数据库&#xff0c;以实现高效的相似性检…...

《Vue3学习手记6》

组件通信 props props 可以父传子&#xff0c;也可以子传父 1.父传子 子组件&#xff1a; <template><div class"child"><h2>子组件</h2><h3>礼物&#xff1a;{{ gift }}</h3><h3 v-show"zichan">父亲给我的…...

抗体品牌推荐

默克超级英雄抗体的披荆斩棘之路 自保罗埃尔利希1891年10月提出“Antikrper”一词后&#xff0c;科研人逐渐意识到抗体&#xff08;Antibody&#xff09;可以应用于各种类型的研究中。 从结构、功能、人体免疫应答……到基因治疗、药物研究&#xff0c;抗体的身影无处不在。值…...

生成式人工智能认证(GAI认证)有什么用?

在人工智能的浪潮中,我们正站在一个前所未有的十字路口。有人将生成式人工智能(Generative AI)视为技术迭代的工具,有人将其视为颠覆行业的“黑匣子”,而更少有人意识到:它正在重新定义人类与技术的共生关系。当AI不再局限于辅助人类,而是开始参与创作、决策甚至伦理判断…...

全新升级:BRAV-7601-T003高性能无风扇AI边缘计算系统,助力智能未来!

在数字化与智能化飞速发展的今天&#xff0c;AI边缘计算正成为各行各业的核心驱动力。BRAV-7601作为一款高性能无风扇AI边缘计算系统&#xff0c;凭借其强大的硬件配置与丰富的扩展能力&#xff0c;为车路协同、特种车辆车载、机器视觉、医疗影像等领域提供了卓越的解决方案。最…...

基于c++的LCA倍增法实现

原理就不写了&#xff0c;自己找b站视频学习 #include <iostream> #include <vector> #include <cmath> #include <algorithm> using namespace std; const int MAXN 100005; // 最大节点数 const int MAXLOG 20; // 最大对数深度 vector<…...

探索大语言模型(LLM):语言模型从海量文本中无师自通

文章目录 引言&#xff1a;当语言模型学会“自己教自己”一、自监督学习&#xff1a;从“无标签”中挖掘“有监督”信号二、语言模型的自监督训练范式&#xff1a;两大经典路径1. 掩码语言模型&#xff08;Masked Language Modeling, MLM&#xff09;——以BERT为例2. 自回归语…...

大语言模型 - 运行、微调的显存计算详解与优化 全量微调、LoRA 优化策略

写在前面 随着Transformer架构的大语言模型&#xff08;LLM&#xff09;不断发展&#xff0c;其参数规模也在迅速增加。无论是进行模型推理还是微调训练&#xff0c;GPU显存消耗都是开发和应用LLM时的重要考量。本文将详细探讨大模型运行&#xff08;推理&#xff09;与微调时…...

【音视频】视频解码实战

FFmpeg流程 从本地读取YUV数据编码为h264格式的数据&#xff0c;然后再存⼊到本地&#xff0c;编码后的数据有带startcode与FFmpeg 示例⾳频编码的流程基本⼀致。 函数说明 avcodec_find_encoder_by_name&#xff1a;根据指定的编码器名称查找注册的编码器。avcodec_alloc_co…...

计算机网络学习笔记 4-6章

第 4 章 网络层 【考纲内容】 &#xff08;一&#xff09;网络层的功能 异构网络互连&#xff1b;路由与转发&#xff1b;SDN 基本概念&#xff1b;拥塞控制 &#xff08;二&#xff09;路由算法 静态路由与动态路由&#xff1b;距离 - 向量路由算法&#xff1…...

游戏哪些接口会暴露源IP?_深度解析服务器通信安全隐患

一、用户认证体系中的IP泄露陷阱 在游戏登录验证环节&#xff0c;采用明文传输的HTTP协议接口会将客户端IP直接暴露在TCP握手阶段。某头部MOBA游戏曾因使用HTTP Basic认证方式&#xff0c;导致黑客通过抓取三次握手数据包获取服务器真实IP。游戏行业权威测试显示&#xff0c;使…...

树莓派学习专题<11>:使用V4L2驱动获取摄像头数据--启动/停止数据流,数据捕获,缓存释放

树莓派学习专题&#xff1c;11&#xff1e;&#xff1a;使用V4L2驱动获取摄像头数据--启动/停止数据流&#xff0c;数据捕获&#xff0c;缓存释放 1. 启动和停止数据流2. 捕获数据3. 释放缓存 1. 启动和停止数据流 使用命令 VIDIOC_STREAMON 启动摄像头数据流&#xff0c;使用…...

adb push 报错:CreateProcess failure, error 123

客户使用adb push 可执行程序的时候报错如下所示 原因&#xff1a;文件目录里边带中文导致 解决方法&#xff1a;将文件目录里中文改成英文就好了...

【实战篇】数字化打印——打印格式设计器的功能说明

前言 myBuilder内置了覆盖丰富场景的打印格式设计器&#xff0c;效果统一&#xff0c;功能完善。 设计器一&#xff1a;小票 用于设计小票、水单等滚筒纸张的场景&#xff0c;例如&#xff1a;超市购物小票 主要功能 打印格式的保存、下载、上传设计时功能&#xff1a;撤销…...

【数据挖掘】时间序列预测-时间序列预测策略

时间序列预测策略 &#xff08;1&#xff09;单步预测与多步预测&#xff08;2&#xff09;直接多步预测&#xff08;3&#xff09;递归多步预测&#xff08;4&#xff09;直接递归的混合预测&#xff08;5&#xff09;多输入多输出预测 &#xff08;1&#xff09;单步预测与多…...

京东商品详情数据爬取难度分析与解决方案

在当今数字化商业时代&#xff0c;电商数据对于市场分析、竞品研究、价格监控等诸多领域有着不可估量的价值。京东&#xff0c;作为国内首屈一指的电商巨头&#xff0c;其商品详情页蕴含着海量且极具价值的数据&#xff0c;涵盖商品价格、库存、规格、用户评价等关键信息。然而…...

【Linux】线程

一.线程概念 我们在学习进程的时候已经知道了&#xff0c;进程内核数据结构pcb自己的代码和数据。那么单单一个task_struct是什么呢&#xff1f; 我们将单个的task_struct叫做轻量级进程&#xff0c;而这个轻量级进程也叫做线程。以往我们在了解进程的时候&#xff0c;一个进…...

WPF-遵循MVVM框架创建图表的显示【保姆级】

文章速览 1、技术栈实现步骤1、创建WPF工程项目2、引入框架 Caliburn.Micro、数据可视化库ScottPlot.WPF3、创建文件夹&#xff0c;并创建相应的View & ViewModel4、创建启动类5、将启动类设置为启动项6、编写View7、编写VM8、将VM和View中的图表进行绑定9、备注 示例效果 …...

深入详解人工智能数学基础—概率论-KL散度在变分自编码器(VAE)中的应用

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...

《代码整洁之道》第9章 单元测试 - 笔记

测试驱动开发 (TDD) 是一种编写整洁代码的“规程”或“方法论”&#xff0c;而不仅仅是测试技术。 JaCoCo 在运行测试后生成详细的覆盖率报告的工具&#xff0c; maven 引用。 测试驱动开发 测试驱动开发&#xff08;TDD&#xff09;是什么&#xff1f; TDD 不是说写完代码…...

每日c/c++题 备战蓝桥杯(P2392 kkksc03考前临时抱佛脚)

【题解】期末考试抱佛脚最短时间&#xff08;动态规划 | 二进制背包&#xff09; 题目链接 题目背景 kkksc03 的大学生活非常颓废&#xff0c;临近期末考试才开始疯狂复习。他有 4 门科目需要复习&#xff0c;每一科都有若干道题目&#xff0c;每道题目需要一定的时间完成。…...

徽客松S1 | 合肥首场 AI 黑客松招募

越来越多的黑客松在各个城市出现&#xff01;5 月 10 日&#xff0c;合肥&#xff0c;12 小时极速挑战。 我们和本次「徽客松」发起人 SDL 也是在一个黑客松上相识。当你的城市还没有黑客松可参加&#xff0c;与其等待&#xff0c;不如学习 SDL&#xff0c;自己发起一个&#…...