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

【分布式文件存储系统Minio】2024.12保姆级教程

文章目录

    • 1.介绍
        • 1.分布式文件系统
        • 2.基本概念
    • 2.环境搭建
        • 1.访问网址
        • 2.账号密码都是minioadmin
        • 3.创建一个桶
        • 4.**Docker安装miniomc突破7天限制**
          • 1.拉取镜像
          • 2.运行容器
          • 3.进行配置
            • 1.格式
            • 2.具体配置
          • 4.查看桶
          • 5.给桶开放权限
    • 3.搭建minio模块
        • 1.创建一个oss模块
          • 1.在sun-common下创建
          • 2.引入minio依赖
            • 1.sun-dependencies 锁定版本
            • 2.sun-common-oss 引入依赖
        • 2.sun-common-oss 模块
          • 1.概览
          • 2.MinioConfig.java
          • 3.FileInfo.java
          • 4.MinioUtil.java
          • 5.StorageAdapter.java
          • 6.MinioStorageAdapter.java
        • 3.sun-demo操作minio
          • 1.引入sun-common-oss
          • 2.application.yml 配置minio参数
          • 3.暴露接口 MinioController.java
          • 4.测试

1.介绍

1.分布式文件系统

CleanShot 2024-08-02 at 15.21.59@2x

CleanShot 2024-08-02 at 15.22.16@2x

2.基本概念

CleanShot 2024-08-02 at 15.34.01@2x

2.环境搭建

1.访问网址

http://ip:9090/

2.账号密码都是minioadmin
3.创建一个桶

CleanShot 2024-08-02 at 15.35.14@2x

CleanShot 2024-08-02 at 15.35.50@2x

4.Docker安装miniomc突破7天限制
1.拉取镜像
docker pull minio/mc:RELEASE.2023-11-15T22-45-58Z.fips
2.运行容器
docker run -it --entrypoint=/bin/sh minio/mc:RELEASE.2023-11-15T22-45-58Z.fips
3.进行配置
1.格式
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY>
2.具体配置
mc config host add minio http://ip:9000 9i14IBbM2ysYVPDa52oK eXRpXcXcX5w4Tmy8HprUkemVi5zzrbpS4NksxxtU
4.查看桶
mc ls minio
5.给桶开放权限
mc anonymous set download minio/桶

3.搭建minio模块

1.创建一个oss模块
1.在sun-common下创建

CleanShot 2024-08-02 at 15.37.36@2x

2.引入minio依赖
1.sun-dependencies 锁定版本
        <minio.version>8.2.0</minio.version><!-- minio依赖 --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>${minio.version}</version></dependency>
2.sun-common-oss 引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 继承父模块的版本和通用依赖 --><parent><groupId>com.sunxiansheng</groupId><artifactId>sun-common</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>sun-common-oss</artifactId><!-- 子模块的version,如果不写就默认跟父模块的一样 --><version>${children.version}</version><dependencies><!-- minio依赖 --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId></dependency><!-- spring-boot-starter-web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency></dependencies></project>
2.sun-common-oss 模块
1.概览

CleanShot 2024-08-02 at 17.55.46@2x

2.MinioConfig.java
package com.sunxiansheng.oss.config;import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Description: minio配置管理* @Author sun* @Create 2024/5/31 9:22* @Version 1.0*/
@Configuration
public class MinioConfig {/*** minioUrl*/@Value("${minio.url}")private String url;/*** minio账户*/@Value("${minio.accessKey}")private String accessKey;/*** minio密码*/@Value("${minio.secretKey}")private String secretKey;/*** 构造minioClient*/@Beanpublic MinioClient getMinioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}}
3.FileInfo.java
package com.sunxiansheng.oss.entity;import lombok.Data;/*** FileInfo类用于存储文件的基本信息,包括文件名、是否为目录的标志以及文件的ETag。* 这个类可以在对象存储系统中用于描述文件的属性。* @Author sun* @Create 2024/5/31 9:47* @Version 1.0*/
@Data
public class FileInfo {// 文件的名称private String fileName;// 指示该文件是否为目录的标志private Boolean directoryFlag;// 文件的ETag,用于标识文件的唯一性private String etag;}
4.MinioUtil.java
package com.sunxiansheng.oss.util;import com.sunxiansheng.oss.entity.FileInfo;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;/*** MinioUtil是一个用于与MinIO对象存储服务进行交互的工具类。* 提供了一系列方法用于管理存储桶和对象,包括创建桶、上传文件、下载文件、删除文件等操作。* @Author sun* @Create 2024/5/31 9:30* @Version 1.0*/
@Component
public class MinioUtil {@Resourceprivate MinioClient minioClient; // MinIO客户端实例,用于执行各种存储操作。/*** 创建存储桶。* 如果指定名称的存储桶不存在,则创建它。** @param bucket 存储桶的名称* @throws Exception 如果创建存储桶时发生错误*/public void createBucket(String bucket) throws Exception {boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());if (!exists) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());}}/*** 上传文件到指定存储桶。** @param inputStream 文件输入流* @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @throws Exception 如果上传文件时发生错误*/public void uploadFile(InputStream inputStream, String bucket, String objectName) throws Exception {minioClient.putObject(PutObjectArgs.builder().bucket(bucket).object(objectName).stream(inputStream, -1, 5242889L).build());}/*** 获取所有存储桶的名称列表。** @return 存储桶名称的列表* @throws Exception 如果获取存储桶列表时发生错误*/public List<String> getAllBucket() throws Exception {List<Bucket> buckets = minioClient.listBuckets();return buckets.stream().map(Bucket::name).collect(Collectors.toList());}/*** 获取指定存储桶中的所有文件信息。** @param bucket 存储桶的名称* @return 文件信息列表,其中包含文件名、是否为目录标志和ETag* @throws Exception 如果获取文件列表时发生错误*/public List<FileInfo> getAllFile(String bucket) throws Exception {Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucket).build());List<FileInfo> fileInfoList = new LinkedList<>();for (Result<Item> result : results) {FileInfo fileInfo = new FileInfo();Item item = result.get();fileInfo.setFileName(item.objectName());fileInfo.setDirectoryFlag(item.isDir());fileInfo.setEtag(item.etag());fileInfoList.add(fileInfo);}return fileInfoList;}/*** 从指定存储桶下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件输入流,用于读取下载的文件内容* @throws Exception 如果下载文件时发生错误*/public InputStream downLoad(String bucket, String objectName) throws Exception {return minioClient.getObject(GetObjectArgs.builder().bucket(bucket).object(objectName).build());}/*** 删除指定存储桶。* 注意:存储桶必须为空才能被删除。** @param bucket 存储桶的名称* @throws Exception 如果删除存储桶时发生错误*/public void deleteBucket(String bucket) throws Exception {minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());}/*** 删除指定存储桶中的文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即要删除的文件在存储桶中的名称* @throws Exception 如果删除文件时发生错误*/public void deleteObject(String bucket, String objectName) throws Exception {minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(objectName).build());}/*** 获取文件的预览URL。* 该URL可以用于在浏览器中查看或下载文件。** @param bucketName 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件的预签名URL* @throws Exception 如果获取预签名URL时发生错误*/public String getPreviewFileUrl(String bucketName, String objectName) throws Exception{GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(objectName).build();return minioClient.getPresignedObjectUrl(args);}
}
5.StorageAdapter.java
package com.sunxiansheng.oss.adapter;import com.sunxiansheng.oss.entity.FileInfo;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.List;/*** StorageAdapter接口定义了与对象存储服务交互的方法。* 这些方法提供了基本的存储操作,如创建存储桶、上传和下载文件、获取文件信息等。* @Author sun* @Create 2024/5/31 10:03* @Version 1.0*/
public interface StorageAdapter {/*** 创建存储桶。* 如果指定名称的存储桶不存在,则创建它。** @param bucket 存储桶的名称*/void createBucket(String bucket);/*** 上传文件到指定存储桶。** @param uploadFile 要上传的文件* @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称*/String uploadFile(MultipartFile uploadFile, String bucket, String objectName);/*** 获取所有存储桶的名称列表。** @return 存储桶名称的列表*/List<String> getAllBucket();/*** 获取指定存储桶中的所有文件信息。** @param bucket 存储桶的名称* @return 文件信息列表,其中包含文件名、是否为目录标志和ETag*/List<FileInfo> getAllFile(String bucket);/*** 从指定存储桶下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件输入流,用于读取下载的文件内容*/InputStream downLoad(String bucket, String objectName);/*** 删除指定存储桶。* 注意:存储桶必须为空才能被删除。** @param bucket 存储桶的名称*/void deleteBucket(String bucket);/*** 删除指定存储桶中的文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即要删除的文件在存储桶中的名称*/void deleteObject(String bucket, String objectName);/*** 获取文件的访问URL。* 该URL可以用于在浏览器中查看或下载文件。* @param originalFilename 原始文件名* @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件的URL*/public String getUrl(String originalFilename, String bucket, String objectName);
}
6.MinioStorageAdapter.java
package com.sunxiansheng.oss.adapter;import com.sunxiansheng.oss.entity.FileInfo;
import com.sunxiansheng.oss.util.MinioUtil;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import java.io.InputStream;
import java.util.List;/*** MinioStorageAdapter类实现了StorageAdapter接口,使用MinioUtil类与MinIO对象存储服务进行交互。* 提供了一系列方法来管理存储桶和对象,包括创建桶、上传文件、下载文件、删除文件等操作。* @Author sun* @Create 2024/5/31 10:06* @Version 1.0*/
@Component
public class MinioStorageAdapter implements StorageAdapter {@Resourceprivate MinioUtil minioUtil; // 使用MinioUtil工具类来执行存储操作/*** MinIO服务的URL。* 该URL通常在配置文件中设置,用于构建文件访问的完整URL。*/@Value("${minio.url}")private String url;/*** 创建存储桶。* 使用MinioUtil工具类创建存储桶。** @param bucket 存储桶的名称*/@Override@SneakyThrowspublic void createBucket(String bucket) {minioUtil.createBucket(bucket);}// ============================== 文件上传后的URL:url + 桶名 + 上传时的objectName ==============================/*** 上传文件到指定存储桶,并返回可访问的url* 使用提供的对象名称或文件的原始名称进行上传。** @param uploadFile 要上传的文件* @param bucket 存储桶的名称* @param objectName 对象名称,表示完整的文件路径和名称*/@Override@SneakyThrowspublic String uploadFile(MultipartFile uploadFile, String bucket, String objectName) {minioUtil.createBucket(bucket);String finalObjectName = generateObjectName(uploadFile.getOriginalFilename(), objectName);minioUtil.uploadFile(uploadFile.getInputStream(), bucket, finalObjectName);return getUrl(uploadFile.getOriginalFilename(), bucket, objectName);}/*** 自定义对象名的格式,上传时的对象名是什么格式,那么下载时的对象名也是什么格式* url的格式就是 url + 桶名 + 对象名** @param originalFilename 原始文件名字* @param objectName 提供的对象名称* @return 最终用于存储的对象名称*/private String generateObjectName(String originalFilename, String objectName) {// 如果对象名为空,则使用文件的原始名称作为对象名if (objectName == null) {return originalFilename;}// 如果对象名不为空,则对象名 + / + 文件名作为对象名return objectName + "/" + originalFilename;}/*** 获取文件的访问URL。* 该URL可以用于在浏览器中查看或下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件的完整URL*/@Override@SneakyThrowspublic String getUrl(String originalFilename, String bucket, String objectName) {// 首先生成对象名String finalObjectName = generateObjectName(originalFilename, objectName);// url的格式就是 url + 桶名 + 对象名return url + "/" + bucket + "/" + finalObjectName;}// ============================== 文件上传后的URL:url + 桶名 + 上传时的objectName ==============================/*** 获取所有存储桶的名称列表。** @return 存储桶名称的列表*/@Override@SneakyThrowspublic List<String> getAllBucket() {return minioUtil.getAllBucket();}/*** 获取指定存储桶中的所有文件信息。** @param bucket 存储桶的名称* @return 文件信息列表,其中包含文件名、是否为目录标志和ETag*/@Override@SneakyThrowspublic List<FileInfo> getAllFile(String bucket) {return minioUtil.getAllFile(bucket);}/*** 从指定存储桶下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件输入流,用于读取下载的文件内容*/@Override@SneakyThrowspublic InputStream downLoad(String bucket, String objectName) {return minioUtil.downLoad(bucket, objectName);}/*** 删除指定存储桶。* 注意:存储桶必须为空才能被删除。** @param bucket 存储桶的名称*/@Override@SneakyThrowspublic void deleteBucket(String bucket) {minioUtil.deleteBucket(bucket);}/*** 删除指定存储桶中的文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即要删除的文件在存储桶中的名称*/@Override@SneakyThrowspublic void deleteObject(String bucket, String objectName) {minioUtil.deleteObject(bucket, objectName);}}
3.sun-demo操作minio
1.引入sun-common-oss
        <!-- 引入sun-common-oss --><dependency><groupId>com.sunxiansheng</groupId><artifactId>sun-common-oss</artifactId><version>1.0-SNAPSHOT</version></dependency>
2.application.yml 配置minio参数
# minio配置
minio:url: http://ip:9000accessKey: minioadminsecretKey: minioadmin
3.暴露接口 MinioController.java
package com.sunxiansheng.user.controller;import com.sunxiansheng.oss.adapter.StorageAdapter;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;/*** Description:* @Author sun* @Create 2024/8/2 16:25* @Version 1.0*/
@RestController
public class MinioController {@Resourceprivate StorageAdapter storageAdapter;/*** 上传文件并返回url*/@RequestMapping("/upload")public String upload(MultipartFile uploadFile, String bucket, String objectName) throws Exception {return storageAdapter.uploadFile(uploadFile, bucket, objectName);}}
4.测试

CleanShot 2024-08-02 at 18.18.25@2x

相关文章:

【分布式文件存储系统Minio】2024.12保姆级教程

文章目录 1.介绍1.分布式文件系统2.基本概念 2.环境搭建1.访问网址2.账号密码都是minioadmin3.创建一个桶4.**Docker安装miniomc突破7天限制**1.拉取镜像2.运行容器3.进行配置1.格式2.具体配置 4.查看桶5.给桶开放权限 3.搭建minio模块1.创建一个oss模块1.在sun-common下创建2.…...

解决ssh和git秘钥认证失败问题

已正确上传公钥到远程服务器&#xff0c;但是本地的连接认证还是使用默认秘钥文件名id_rsa或者默认用户名&#xff0c;导致了认证失败&#xff0c;总结了以下解决办法&#xff1a; 1、ssh秘钥认证 远程登录的时候可能ssh客户端默认使用id_rsa文件名秘钥&#xff0c;但是之前生…...

AI安全的挑战:如何让人工智能变得更加可信

引言 随着人工智能&#xff08;AI&#xff09;技术在各个领域的广泛应用&#xff0c;尤其是在医疗、金融、自动驾驶和智能制造等行业&#xff0c;AI正在重塑我们的工作和生活方式。从提高生产效率到实现个性化服务&#xff0c;AI带来了前所未有的便利。然而&#xff0c;在享受这…...

腾讯通RTX升级迁移攻略,兼容Linux内核国产系统及移动端

一、腾讯通RTX继续使用的主要难题 腾讯通RTX停更后&#xff0c;用户不仅无法继续获得更新、技术支持和资源下载&#xff0c;还面临着以下无法解决的使用问题&#xff1a; ● 不兼容国产系统与移动端&#xff1a;腾讯通RTX仅支持Windows和Mac操作系统&#xff0c;无法在基于Li…...

用css实现瀑布流布局

上效果 知识理解 column-count: 4; column-gap: 15px;实现固定四行瀑布流布局 columns: 200px auto;column-gap: 15px;由浏览器根据容器的宽度自动调整&#xff0c;尽可能一行多个200px宽度的列数 <!DOCTYPE html> <html lang"en"><head><me…...

FortiAl为擎重塑网络与安全运营未来

在当今数字化浪潮汹涌的时代&#xff0c;网络安全运营的重要性愈发凸显&#xff0c;而人工智能的迅猛发展则如同一股强劲的东风&#xff0c;为这一领域带来了革命性的变革。Fortinet攻防专家邹国雄在《FortiAI&#xff1a;以生成式人工智能&#xff08;GenAI&#xff09;简化Fo…...

优化租赁小程序提升服务效率与用户体验的策略与实践

内容概要 在这个快速发展的商业环境中&#xff0c;租赁小程序成为了提升服务效率和用户体验的重要工具。通过对用户需求的深入挖掘&#xff0c;我们发现他们对于功能的便捷性、响应速度和界面的友好性有着极高的期待。因此&#xff0c;针对这些需求&#xff0c;完善租赁小程序…...

基于Python的医院预约挂号与诊断系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Spring Boot教程之四十:使用 Jasypt 加密 Spring Boot 项目中的密码

如何使用 Jasypt 加密 Spring Boot 项目中的密码 在本文中&#xff0c;我们将学习如何加密 Spring Boot 应用程序配置文件&#xff08;如 application.properties 或 application.yml&#xff09;中的数据。在这些文件中&#xff0c;我们可以加密用户名、密码等。 您经常会遇到…...

Design Compiler:两种工作模式(线负载模式和拓扑模式)

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 Design Compiler可以以线负载模式或拓扑模式启动&#xff0c;必须选择其中一个模式。在拓扑模式下还可使用多模式和UPF模式&#xff1a;多模式允许在多种工作…...

窦明—环境和教育对人的影响具象化

窦明—“环境和教育有多影响人”的具象化 本篇载体&#xff1a;窦明与环境 本篇主体&#xff1a;环境和教育对人的影响 很多网友调侃说&#xff0c;窦明前后两世性格变了&#xff0c;连面向都看起来变了 可不是嘛&#xff0c;命相和品相生面相&#xff0c;性格也影响着神态和…...

41.1 预聚合提速实战项目之需求分析和架构设计

本节重点介绍 : 需求分析架构设计 需求分析 使用预聚合提速查询并且降低高基数查询对后端的压力用户无需变更grafana上的查询语句&#xff0c;后端自动替换效果图 架构设计 架构图 解决方案说明 heavy_query对用户侧表现为查询速度慢在服务端会导致资源占用过多甚至打挂…...

洛谷P2814 家谱(c嘎嘎)

题目链接&#xff1a;P2814 家谱 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及/提高 解题心得&#xff1a;这道题用了并查集&#xff08;貌似不怎么常用的字符串并查集&#xff09;&#xff0c;用STL中的map将子孙和祖先连接起来&#xff0c;第一次接触这种做法感…...

时空信息平台-API安全措施-下篇:登录鉴权【访问受限】您的请求已被该站点的安全策略拦截。

文章目录 引言I 登录鉴权处理逻辑校验顺序用户状态校验密码校验Token鉴权短信验证码/图形验证码登录设备限制II 服务端发生错误的处理业务返回码处理前端处理业务返回码nginx处理http状态码引言 时空信息平台-API安全措施:上篇(通讯协议的安全措施) https://blog.csdn.net/z…...

找不到vcruntime140.dll文件,无法继续执行如何修复?共有7种方法

vcruntime140.dll是Microsoft Visual C 2015 Redistributable包的一部分&#xff0c;它是一个动态链接库&#xff08;DLL&#xff09;&#xff0c;为使用C编写的程序提供必要的运行时支持。当用户尝试运行依赖于这个DLL的程序时&#xff0c;如果系统中缺少vcruntime140.dll文件…...

【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】

文章目录 PCIe Message 与 MSIPCIe Message 和 MSI 的作用与关系MSI 的配置与寄存器MSI 和 ARM GIC 的关系示例&#xff1a;MSI 在 ARM GIC 的实际应用总结 PCIe Message 与 MSI 本文将介绍 PCIe message 的作用以及message 与 MSI 的关系&#xff0c;再介绍 MSI 如何配置以及…...

Docker搭建MySQL

Docker搭建MySQL 准备工作 先准备配置目录和持久化目录&#xff0c;举个栗子&#xff1a;mkdir -p /opt/module/mysql/{conf,data,log}准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。当然不准备也没事&#xff0c;容器中有个默认配置&#xff1a;/etc/mysql/conf.d/m…...

#C01L11P02. C01.L11.while循环.while循环和for循环的区别

唉&#xff0c;你们善良的王又来给你们发文章了&#xff01;&#xff01;&#xff01; for循环一般应用于循环次数已知的情况&#xff1b; while循环一般应用于循环次数未知的情况&#xff1b; 在一般情况下&#xff0c;这两者是可以相互转化的。 举一个简单较适合用for循环…...

利用deepspeed在Trainer下面微调大模型

当模型参数越来越大的情况下&#xff0c;如果我们的GPU内存比较小&#xff0c;那么就没办法直接进行全参数微调&#xff0c;此时我们可以借助deepspeed来进行微调。 1、deepspeed的配置文件&#xff1a;deepspeed.json {"train_batch_size": 4,"train_micro_b…...

【spring】参数校验Validation

前言 在实际开发中&#xff0c;我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递&#xff0c;传来的参数长度不符合要求等&#xff0c;这种时候如果放任不管&#xff0c;继续执行后续业务逻辑&#xff0c;很有可能就会出现意想不到的bug。 有人可能会…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...