MinIO的安装与使用

目录

1、安装MinIO

1.1 下载 MinIO 可执行文件

1.2 检查 MinIO 是否安装成功

1.3 设置数据存储目录

1.4 配置环境变量(可选)

1.5 编写启动的脚本

1.6 开放端口

1.7 访问

2、项目实战

2.1 引入依赖

2.2 配置yml文件

2.3 编写Minio配置类

2.4 编写Minio操作类

2.5 业务类

2.6 测试

1、安装MinIO

1.1 下载 MinIO 可执行文件

        首先,下载 MinIO 的最新版本。你可以从 MinIO 官网下载或者使用 wget 直接下载。以下是使用 wget 下载并安装的步骤。

# 下载 MinIO 的可执行文件
wget https://dl.min.io/server/minio/release/linux-amd64/minio# 为 MinIO 可执行文件添加执行权限
chmod +x minio# 将 MinIO 移动到系统的可执行路径(例如 /usr/local/bin)
sudo mv minio /usr/local/bin/

1.2 检查 MinIO 是否安装成功

        通过以下命令验证 MinIO 是否安装成功:

minio --version

        如果安装成功,您会看到 MinIO 的版本信息。 

1.3 设置数据存储目录

        选择一个目录来存储 MinIO 的数据。例如,创建一个 /app/minio/data(这是我的目录,自行修改) 目录用于 MinIO 存储。

sudo mkdir /app/minio/data

1.4 配置环境变量(可选)

        可以通过设置环境变量来配置 MinIO 的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD,这些凭证会用于访问 MinIO Web 控制台和 API。

export MINIO_ROOT_USER="***"
export MINIO_ROOT_PASSWORD="****"

1.5 编写启动的脚本

vim minio.sh
#!/bin/bash
#nohup启动服务 指定文件存放路径/app/minio/data 还有设置日志文件路径/app/minio/minio.log
nohup ./minio server --address :9000 --console-address :9001 /app/minio/data > /app/minio/minio.log 2>&1 &

注意:

1.--address指定了minio的api端口,--console-address指定了minio的可视化管理界面的端口!

2.如果1.4没有执行也可以把1.4的环境变量写在启动的脚本里面 !

3.指定了1.3里面创建的数据存储路径并生成日志文件!

# 赋权
chmod +x minio.sh
# 启动脚本
./minio.sh
#查看日志
cat /app/minio/minio.log

1.6 开放端口

systemctl start firewalld && firewall-cmd --permanent --add-port=9001/tcp && firewall-cmd --reload && firewall-cmd --query-port=9001/tcp
systemctl start firewalld && firewall-cmd --permanent --add-port=9000/tcp && firewall-cmd --reload && firewall-cmd --query-port=9000/tcp

 一定要开放9000和9001两个端口!

1.7 访问

http://ip:9001

如果1.3和1.4都没有配置环境变量,那么账号密码都为默认的minioadmin:minioadmin

2、项目实战

2.1 引入依赖

        <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.4</version></dependency><!-- minio8.3以上版本需要手动引入okhttp--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.3</version></dependency>

2.2 配置yml文件

####################################minio配置#################################
minio:#此处需注意,需要配置minio的api的端口,配置可视化管理界面的端口会导致接口不报错但是文件操作不了url: http://ip:9000access-key: *****secret-key: *****bucket-name: ****

2.3 编写Minio配置类

package com.example.config;import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** <p>* Minio配置类* </p>** @custom.date 2025/1/22 14:19*/
@Data
@Configuration
public class MinioConfig {/*** 访问地址*/@Value("${minio.url}")private String endpoint;/*** accessKey类似于用户ID,用于唯一标识你的账户*/@Value("${minio.access-key}")private String accessKey;/*** secretKey是你账户的密码*/@Value("${minio.secret-key}")private String secretKey;/*** 默认存储桶*/@Value("${minio.bucket-name}")private String bucketName;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();}}

2.4 编写Minio操作类

package com.example.config;import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;@Component
@Configuration
public class MinioTemplate {public MinioTemplate() {}@Autowiredprivate MinioConfig minioConfig;@Autowiredprivate MinioClient minioClient;public void createBucket(String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {MinioClient minioClient = this.minioClient;if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}}/*** 获取文件外链* @param bucketName bucket 名称* @param objectName 文件名称* @return*/public String getObjectURL(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {return this.minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(objectName).build());}/*** 获取文件* @param bucketName* @param objectName* @return*/public InputStream getObject(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {return this.minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());}/*** 上传文件* @param bucketName* @param objectName* @param stream*/public void putObject(String bucketName, String objectName, InputStream stream) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {//createBucket(bucketName);this.minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(stream, stream.available(), -1).build());}/*** 删除文件* @param bucketName* @param objectName*/public void removeObject(String bucketName, String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {this.minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());}/*** 下载文件* @param bucketName* @param objectName*/public InputStream downloadFile(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {return this.minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());}}

2.5 业务类

package com.example.service;import com.example.config.MinioTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.io.InputStream;@Service
public class MinioStorageService {@Autowiredprivate MinioTemplate minioTemplate;@Value("${minio.bucket-name}")private String bucketName;/*** 获取文件外链** @param objectName 文件名称*/public String getObjectURL(String objectName) {try {return minioTemplate.getObjectURL(bucketName, objectName);} catch (Exception e) {e.printStackTrace();}return null;}public String uploadFile(InputStream inputStream, String filePath) {String path = null;try {minioTemplate.putObject(bucketName, filePath, inputStream);path = filePath;} catch (Exception e) {}return path;}public InputStream downloadFile(String filePath) {InputStream inputStream = null;try {inputStream = minioTemplate.getObject(bucketName, filePath);} catch (Exception e) {e.printStackTrace();}return inputStream;}public void removeFile(String filePath){try{minioTemplate.removeObject(bucketName,filePath);}catch (Exception e){e.printStackTrace();}}public void createBucket(String bucketName) {try {minioTemplate.createBucket(bucketName);} catch (Exception e) {e.printStackTrace();}}
}

2.6 测试

package com.example.controller;import com.example.service.MinioStorageService;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
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;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;@RestController
public class MinioController {@Autowiredprivate MinioStorageService minioStorageService;@RequestMapping("/createBucket")public void createBucket(@RequestParam("bucketName") String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {minioStorageService.createBucket(bucketName);}@RequestMapping("/uploadFile")public void uploadFile(@RequestParam("file") MultipartFile file,@RequestParam("fileName") String fileName) throws IOException {minioStorageService.uploadFile(file.getInputStream(),fileName);}}

上传成功后可以在控制台中看到这个文件 。

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

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

相关文章

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅

CSDN 博客之星 2024&#xff1a;默语的技术进阶与社区耕耘之旅 &#x1f31f; 默语&#xff0c;是一位在技术分享与社区建设中坚持深耕的博客作者。今年&#xff0c;我有幸再次入围成为 CSDN 博客之星TOP300 的一员&#xff0c;这既是对过往努力的肯定&#xff0c;也是对未来探…

土壤墒情中土壤 pH 值的监测方法与意义

土壤&#xff0c;作为农作物生长的根基&#xff0c;其质量对农业生产有着深远影响。在衡量土壤质量的众多指标中&#xff0c;土壤 pH 值是极为关键的一项。它不仅反映了土壤的酸碱度&#xff0c;还直接或间接地影响着土壤中养分的有效性、微生物的活性以及农作物的生长发育。因…

Trimble三维激光扫描-地下公共设施维护的新途径【沪敖3D】

三维激光扫描技术生成了复杂隧道网络的高度详细的三维模型 项目背景 纽约州北部的地下通道网络已有100年历史&#xff0c;其中包含供暖系统、电线和其他公用设施&#xff0c;现在已经开始显露出老化迹象。由于安全原因&#xff0c;第三方的进入受到限制&#xff0c;在没有现成纸…

开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)

一些 Linux 基本概念 个人理解&#xff0c;并且为了便于理解&#xff0c;可能会存在一些问题&#xff0c;如果有根本上的错误希望大家及时指出 发行版 WSL 的系统是基于特定发行版的特定版本的 Linux 发行版 有固定组织维护的、开箱就能用的 Linux 发行版由固定的团队、社…

从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)

从零到上线&#xff1a;Node.js 项目的完整部署流程&#xff08;包含 Docker 和 CI/CD&#xff09; 目录 项目初始化&#xff1a;构建一个简单的 Node.js 应用设置 Docker 环境&#xff1a;容器化你的应用配置 CI/CD&#xff1a;自动化构建与部署上线前的最后检查&#xff1a;…

安卓动态设置Unity图形API

命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…

python如何导出数据到excel文件

python导出数据到excel文件的方法&#xff1a; 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中&#xff0c;然后使用save()函数保存excel文件 ws.write(0, 0, 1234…

虚幻基础-1:cpu挑选(14600kf)

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 ue非常吃cpu拉满主频打开项目编写蓝图运行原因 时间长 关于压力测试 本文以14600kf为例&#xff0c;双12购入&#xff0c;7月份产。 ue非常吃cpu 经本人测试&#xff0c;ue是非常吃cpu的。 拉满主频 无论任何时间…

MECD+: 视频推理中事件级因果图推理--VLM长视频因果推理

论文链接&#xff1a;https://arxiv.org/pdf/2501.07227v1 1. 摘要及主要贡献点 摘要&#xff1a; 视频因果推理旨在从因果角度对视频内容进行高层次的理解。然而&#xff0c;目前的研究存在局限性&#xff0c;主要表现为以问答范式执行&#xff0c;关注包含孤立事件和基本因…

mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用

全国地图json数据下载地址 目录 html加载全部代码 方式一&#xff1a;使用html方式加载geojson 1. 初始化地图 2. 加载geojson数据 设置geojson图层样式&#xff0c;设置type加载数据类型 设置线条 鼠标移入改变颜色&#xff0c;设置图层属性&#xff0c;此处是fill-extru…

接上篇基于Alertmanager 配置钉钉告警

Alertmanager 是一个用于处理和管理 Prometheus 警报的开源工具。它负责接收来自 Prometheus 服务器的警报&#xff0c;进行去重、分组、静默、抑制等操作&#xff0c;并通过电子邮件、PagerDuty、Slack 等多种渠道发送通知。 主要功能 去重&#xff1a;合并相同或相似的警报&a…

通过视觉语言模型蒸馏进行 3D 形状零件分割

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01;对应英文要求比较高&#xff0c;特此说明&#xff01; Abstract This paper proposes a cross-modal distillation framework, PartDistill, which transfers 2D knowledge from vision-language models …

PID 控制算法(二):C 语言实现与应用

在本文中&#xff0c;我们将用 C 语言实现一个简单的 PID 控制器&#xff0c;并通过一个示例来演示如何使用 PID 控制算法来调整系统的状态&#xff08;如温度、速度等&#xff09;。同时&#xff0c;我们也会解释每个控制参数如何影响系统的表现。 什么是 PID 控制器&#xf…

数据结构——实验一·线性表

海~~欢迎来到Tubishu的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种变成资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…

vector的使用,以及部分功能的模拟实现(C++)

1.vector的介绍及使用 1.1 vector的介绍 vector是STL容器中的一种常用的容器&#xff0c;和数组类似&#xff0c;由于其大小(size)可变&#xff0c;常用于数组大小不可知的情况下来替代数组。 vector也是一种顺序容器&#xff0c;在内存中连续排列&#xff0c;因此可以通过下标…

【Postgres_Python】使用python脚本批量创建和导入多个PG数据库

之前批量创建和导入数据库分为2个python脚本进行&#xff0c;现整合优化代码合并为一个python脚本&#xff0c;可同步实现数据库的创建和数据导入。之前的文章链接&#xff1a; 【Postgres_Python】使用python脚本批量创建PG数据库 【Postgres_Python】使用python脚本将多个.S…

U-Net - U型网络:用于图像分割的卷积神经网络

U-Net是一种专为图像分割任务设计的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;最初由Olaf Ronneberger等人于2015年提出。它被广泛应用于医学影像分析、遥感图像分割、自动驾驶和其他许多需要对图像进行像素级分类的任务中。U-Net具有强大的特征提取和恢复能力&…

ceph基本概念,架构,部署(一)

一、分布式存储概述 1.存储分类 存储分为封闭系统的存储和开放系统的存储&#xff0c;而对于开放系统的存储又被分为内置存储和外挂存储。 外挂存储又被细分为直连式存储(DAS)和网络存储(FAS)&#xff0c;而网络存储又被细分网络接入存储(NAS)和存储区域网络(SAN)等。 DAS(D…

联想电脑怎么用u盘装系统_联想电脑用u盘装win10系统教程

联想电脑怎么重装系统&#xff1f;在当今科技发展迅猛的时代&#xff0c;联想电脑已经成为了人们生活中不可或缺的一部分。然而&#xff0c;随着时间的推移&#xff0c;我们可能会遇到一些问题&#xff0c;例如系统崩溃或者需要更换操作系统。这时&#xff0c;使用U盘来重新安装…

基于ESP32-IDF驱动GPIO输出控制LED

基于ESP32-IDF驱动GPIO输出控制LED 文章目录 基于ESP32-IDF驱动GPIO输出控制LED一、点亮LED3.1 LED电路3.2 配置GPIO函数gpio_config()原型和头文件3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件3.4 代码实现并编译烧录 一、点亮LED 3.1 LED电路 可以看到&#x…