Windows环境使用SpringBoot整合Minio平替OSS

news2024/10/6 2:18:11

目录

配置Minio环境 

 一、下载minio.exe mc.exe

 二、设置用户名和密码

用管理员模式打开cmd

三、启动Minio服务器

四、访问WebUI给的地址

SpringBoot整合Minio

一、配置依赖,application.yml

二、代码部分

FileVO

MinioConfig

MinioUploadService

MinioController

三、Postman测试

配置Minio环境 

 一、下载minio.exe mc.exe

下载地址:https://min.io/download?license=agpl&platform=windows#/windows

记住下面这个图,重要的步骤都在这张图里面

 二、设置用户名和密码

用管理员模式打开cmd

然后进入到 minio.exe 所在的目录


再来回顾刚开始的这张图 ,现在来设置用户名和密码

这里的 adminpassword可以自定义

setx MINIO_ROOT_USER admin
setx MINIO_ROOT_PASSWORD password


设置完成之后可以在环境变量看见刚刚设置的值

三、启动Minio服务器

现在用命令打开服务器,官网使用powershell,如果你也是用的powershell直接cv下来运行

C:\minio.exe server F:\Data --console-address ":9001"

记得修改路径为自己本地路径


这里我用的是cmd.exe,命令是:

.\minio.exe server D:\WorkSpaces\Minio\data --console-address "127.0.0.1:9000" --address "127.0.0.1:9001"

 因为放在代码块里会压缩,这里同时拿出来给各位看一下

.\minio.exe  server  D:\WorkSpaces\Minio\data --console-address "127.0.0.1:9000" --address "127.0.0.1:9001" 

 三个色块分别代表的是

①服务器存储的位置  D:\WorkSpaces\Minio\data 

②服务端的端口    --console-address "127.0.0.1:9000"

③控制台端口  --address "127.0.0.1:9001" 

启动成功之后如上图所示

四、访问WebUI给的地址

 http://127.0.0.1:9000

输入WebUI下面给的用户名密码登录


这个Bucket可以理解成是一个仓库,或者说是一个文件夹 

自此,Minio的环境就搭建好了


注意:

停止服务在用  Ctrl+C

下次minio启动服务的命令依旧这个


接下来就是将minio与SpringBoot整合

SpringBoot整合Minio

这里我单独创建了一个minio-test项目

一、配置依赖,application.yml

server:
  port: 8080

spring:
  # 配置文件上传大小限制
  servlet:
    multipart:
      max-file-size: 50MB
      max-request-size: 50MB

minio:
  config:
    access-key: odyssey # 用户账号
    secret-key: 88888888 # 密码
    secure: false #如果是true,则用的是https而不是http,默认值是true
    bucketName: "test2"  # 桶的名字 相当于文件夹
    url: http://127.0.0.1:9001


二、代码部分


FileVO

@Data
public class FileVO {
    private String url;

    private String fileName;

    private Long size;

    private String extname;
}

MinioConfig

@Data
@Configuration
@ConfigurationProperties(prefix = "minio.config")
public class MinioConfig {

    /**
     * 端点
     */
    private String url;

    /**
     * 用户名
     */
    private String accessKey;

    /**
     * 密码
     */
    private String secretKey;

    /**
     * 存储桶名称
     */
    private String bucketName;

    @Bean
    public MinioClient getMinioClient() {
        return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
    }
}

MinioUploadService

@Slf4j
@Service
public class MinioUploadService  {

    // 注入minio配置文件
    @Autowired
    private MinioConfig minioConfig;

    // 注入minio client
    @Autowired
    private MinioClient client;


    public FileVO upload(MultipartFile file) throws ServerException {
        FileVO fileVO = new FileVO();
        try {
            // 获取文件真实名称
            String originalFilename = file.getOriginalFilename();
            // 获取文件的扩展名 例如.jpg .doc
            String extname = originalFilename.substring(originalFilename.lastIndexOf("."));
            // 构建文件上传相关信息
            PutObjectArgs args = PutObjectArgs.builder()
                    .bucket(minioConfig.getBucketName())
                    .object(originalFilename)
                    .stream(file.getInputStream(), file.getSize(), -1)
                    .contentType(file.getContentType())
                    .build();
            // 将文件上传到minio服务器
            client.putObject(args);
            log.info("文件上传成功");
            // 组装文件信息,返回前端 或者存入数据路
            String url = minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + originalFilename;
            fileVO.setUrl(url);
            fileVO.setSize(file.getSize());
            fileVO.setFileName(originalFilename);
            fileVO.setExtname(extname);
        } catch (Exception e) {
            throw new ServerException("文件上传异常" + e.getCause().toString());
        }
        return fileVO;
    }
}


MinioController

@RestController
@RequestMapping("/file")
public class MinioController {
    @Autowired
    private MinioUploadService minioUploadService;
    @PostMapping("/upload")
    public FileVO upload(@RequestParam("file") MultipartFile file) throws ServerException {
        FileVO upload = minioUploadService.upload(file);
        return upload;
    }
}



 代码部分到此结束,记得安装lombok依赖 导入相应的包~

然后启动项目,项目正常

三、Postman测试

 文件我自己选择的是一张图片,然后点击Send

测试成功,现在来看看客户端有没有这条 2344开头的jpg文件

 可以在图中看出已经在test2中显示了这个文件,至此,教程结束

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

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

相关文章

Python (Ansbile)脚本高效批量管理服务器和安全

1、简介 在现代 IT 基础设施中,管理大量服务器是一项复杂而繁琐的任务。特别是在检查服务器的存活状态以及 SSH 登录等任务上,手动操作非常耗时且容易出错。本文将介绍如何使用 Python 脚本实现对多台服务器的批量检查和管理,包括检查服务器…

用dify实现简单的Agent应用(AI信息检索)

这篇文章里,我们来聊聊如何使用字节最新的豆包大模型,在 Dify 上来快速完成一个具备理解需求、自主规划、自主选择工具使用的简单智能体(Agent)。 准备工作 完整准备过程分为:准备 Docker 环境、启动 Dify 程序、启动…

Spring框架的学习SpringMVC(1)

1.什么是MVC (1)MVC其实就是软件架构的一种设计模式,它将软件的系统分为,(视图,模型,控制器)三个部分 1.1View(视图) 视图也就是,在浏览器显示的那一个部分,是后端数据的呈现 1.…

02-部署LVS-DR群集

1.LVS-DR工作原理 LVS-DR模式,Director Server作为群集的访问入口,不作为网购使用,节点Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过Director Server 为了响应对整个群集的访问,…

实验一 MATLAB \ Python数字图像处理初步

一、实验目的: 1.熟悉及掌握在MATLAB\Python中能够处理哪些格式图像。 2.熟练掌握在MATLAB\Python中如何读取图像。 3.掌握如何利用MATLAB\Python来获取图像的大小、颜色、高度、宽度等等相关信息。 4.掌握如何在M…

电脑录音怎么录?简单四个方法轻松搞定!

在电脑上录制音频是一项非常实用的技能,适合多种场合的需求。例如,你可能需要录制自己的声音,用于录音广播、演示或视频制作;也可能需要录制电脑中的声音,如音乐、游戏音效或在线直播;或者需要捕捉浏览器中…

2024 年 亚太赛 APMCM (A题)中文赛道国际大学生数学建模挑战赛 | 飞行器外形的优化 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题! 完整内容可以在文章末尾领取! 第一个问…

ScaleCache: A Scalable Page Cache for Multiple Solid-State Drives——论文泛读

EuroSys 2024 Paper 论文阅读笔记整理 问题 高性能存储设备,如具有GB/s级I/O带宽的NVMe SSD,已被广泛应用于企业服务器中。对于处理大量数据,在RAID配置中使用多个SSD很有吸引力,这可以提高I/O性能、可靠性和容量。尽管多个SSD为…

隐私集合求交(PSI)原理深入浅出

隐私集合求交技术是多方安全计算领域的一个子问题,通常也被称为安全求交、隐私保护集合交集或者隐私交集技术等,其目的是允许持有各自数据集的双方或者多方,执行两方或者多方集合的交集计算,当PSI执行完成,一方或者两方…

SQL Server 2022的组成

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 SQL Server 2022主要由4部分组成,分别是数据库引擎、分析服务、集成服务和报表服务。本节将详细介绍这些内容。 1.2.1 SQL Server 2022的数据库引擎 SQL Server 2022的…

90%的铲屎官必遇到家里猫毛满天飞问题,热门宠物空气净化器分享

作为一名资深猫奴,一到换毛季节家中就会忍受猫毛飞舞、异味四溢的双重困扰?花粉加上宠物的毛发和体味,过敏和不适似乎成了家常便饭。尝试过很多半方法,用过空气净化器去除毛和异味,虽然普通空气净化器可能提供一定程度…

MySQL数据库的备份-恢复-日志

一、备份 1.1数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 1.2造成数据丢失的原因 程序错误人为操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 1.3数…

Flutter——最详细(Drawer)使用教程

背景 应用左侧或右侧导航面板; 属性作用elevation相当于阴影的大小 import package:flutter/material.dart;class CustomDrawer extends StatelessWidget {const CustomDrawer({Key? key}) : super(key: key);overrideWidget build(BuildContext context) {return…

3个让你爽到爆炸的学习工具

We OCR WeOCR 是一个基于浏览器的文字识别工具,用户可以通过上传图片来识别其中的文本信息。它是一个渐进式网络应用程序(PWA),可以在浏览器中离线使用。WeOCR 是开源的,并且基于 Tesseract OCR 引擎开发。用户无需在本…

day04-组织架构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.组织架构-树组件应用树形组件-用层级结构展示信息,可展开或折叠。 2.组织架构-树组件自定义结构3.组织架构-获取组织架构数据4.组织架构-递归转化树形…

【持续更新】vs 编译过程中的问题及其解决方案

独立寒秋,湘江北去,橘子洲头。 目录 问题 1 : 无法查看或者打开 PDB 文件。 问题 2 : 命令提示符中查看运行结果,控制台闪退。 问题 3 : 某功能的判断条件:int val > 1e9,逻辑…

004 线程的状态

文章目录 Java线程可能的状态: 状态名称说明NEW初始状态,线程被构建,但是还没有调用start()方法RUNNABLE运行状态,Java线程将操作系统中的就绪和运行两种状态笼统地称作"运行中"BLOCKED阻塞状态,表示线程阻…

轻松实现百度大模型ERNIE对话

该代码直接可用,实现了流式输出,只需要在你自己的开发环境配置百度申请的QIANFAN_AK和QIANFAN_SK即可使用啦。// # 在.env文件中,设置以下内容,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk 不过需要…

秋招Java后端开发冲刺——并发篇2(JMM与锁机制)

本文对Java的内存管理模型、volatile关键字和锁机制进行详细阐述,包括synchronized关键字、Lock接口及其实现类ReentrantLock、AQS等的实现原理和常见方法。 一、JMM(Java内存模型) 1. 介绍 JMM定义了共享内存中多线程程序读写操作的行为规…

JAVA案例模拟电影信息系统

一案例要求: 二具体代码(需要在同一个包下创建三个类) Ⅰ:实现类 package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {javabean[]moviesnew javabean[4];movies[0] new ja…