Minio保姆级教程

news2025/1/16 21:18:12

转载自:www.javaman.cn

Minio服务器搭建和整合

1、centos安装minio

1.1、创建安装目录

mkdir -p /home/minio

1.2、在线下载minio

#进入目录
cd /home/minio
#下载
wget https://dl.minio.io/server/minio/release/linux-amd64/minio

在这里插入图片描述

1.3、minio配置

1.3.1、添加执行权限
#进入目录
cd /home/minio
#添加执行权限
chmod +x minio
1.3.2、创建minio存储文件夹(该文件夹就是Buckets目录)
mkdir -p /data/minio/book
1.3.3、创建minio配置文件

编写minio配置文件,修改下面代码,wq保存

vim /etc/default/minio

#内容如下
MINIO_ROOT_USER="minioadmin"
MINIO_ROOT_PASSWORD="minioadmin"
MINIO_VOLUMES="/data/minio/book"
MINIO_OPTS="--address 0.0.0.0:9000"
MINIO_OPTS1="--console-address 0.0.0.0:39249"
1.3.4、设置开机启动
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target

[Service]
WorkingDirectory=/usr/local/
User=minio
Group=minio
EnvironmentFile=-/usr/local/etc/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS /data/minio
Restart=always
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
1.3.4、启动
#加载配置
systemctl daemon-reload
#启动minio
systemctl start minio.service
#开启开机自启
systemctl enable minio.service
#查看启动状态
systemctl status minio.service

如下图,代表启动成功

在这里插入图片描述

如果是使用的ecs服务器,需要在安全管理里面把9001和控制台端口(目前使用的是39249,可以在1.3.3步骤配置文件里修改)

1.3.5、登录控制台

浏览器输入地址:http://IP:39249/login,用户名密码为配置文件(MINIO_ROOT_USER="minioadmin"MINIO_ROOT_PASSWORD=“minioadmin”)

在这里插入图片描述

1.3.6、minio配置

1、主界面如下:

在这里插入图片描述

2、点击book,进入buckets的详细信息

在这里插入图片描述

在这里插入图片描述

2、创建access keys访问密钥,主要用于程序连接的时候进行安全控制在这里插入图片描述

2、springboot整合minio

2.1、pom.xml

<!-- minio图片服务器 -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>${minio.version}</version>
</dependency>

2.2、配置yaml.xml文件

minio:
  endpoint: http://Ip:9000
  accessKey: 2Oo1pE1YHEFTU3eojldN1
  secretKey: 2Z5dJ7EHkd5WOYzK7wxtHPkye2Tc824xWzqPzHd7T
  bucketName: book  ##对应buckets

2.3、编写properties组件,用于读取yaml配置生成bean

package com.ds.core.config.properties;

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = MinioProperties.PREFIX)
public class MinioProperties
{
    public static final String PREFIX = "minio";
    /**
     * ip:minio地址
     */
    private String endpoint;

    /**
     * 账号
     */
    private String accessKey;

    /**
     * 秘钥
     */
    private String secretKey;
    /**
     * bucketName
     */
    private String bucketName;

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

2.4、编写MinioService

提供一个简单的方式来与MinIO服务器交互,执行基本的存储桶和文件操作。

package com.ds.blog.system.service;

import com.ds.core.config.properties.MinioProperties;
import io.minio.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.UUID;

@Service
public class MinioService {
    @Autowired
    private MinioClient minioClient;
    @Autowired
    private MinioProperties minioProperties;

    
    //创建存储桶: createBucket方法用于创建一个新的存储桶(如果它还不存在)。存储桶是MinIO中用于存储对象的容器。
    public void createBucket(String bucketName) throws Exception{
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
    }
    
    //上传文件: uploadFile方法允许用户上传一个文件到指定的存储桶。文件名被修改为一个随机的UUID加上原始文件的扩展名,这有助于避免文件名冲突。上传后,返回一个URL,该URL可以用来访问上传的文件
    public String uploadFile(String bucketName, MultipartFile file) throws Exception {
        String filename = UUID.randomUUID().toString()+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(bucketName)
                .object(filename)
                .stream(file.getInputStream(), file.getInputStream().available(), -1)
                .contentType(file.getContentType())
                .build());
        return minioProperties.getEndpoint() + "/" + bucketName + "/" + filename;
    }

    //下载文件: downloadFile方法允许用户下载指定存储桶中的文件,并返回该文件的输入流。
    public InputStream downloadFile(String bucketName, String filename) throws Exception {
        return minioClient.getObject(GetObjectArgs.builder()
                .bucket(bucketName)
                .object(filename)
                .build());
    }
}


2.5、文件上传controller

package com.ds.blog.system.base;

import com.ds.blog.system.service.MinioService;
import com.ds.common.domain.Result;
import com.ds.core.config.properties.MinioProperties;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

@RestController
public class MinioController {

    @Resource
    private MinioService minioService;

    @Resource
    private MinioProperties minioProperties;

    @PostMapping("/file/upload")
    public Result upload(MultipartFile file) throws Exception {
        String s = minioService.uploadFile(minioProperties.getBucketName(), file);
        return Result.success(s);

    }

}

2.6、前端请求路径

$.ajax({
            url: ctx + '/file/upload',// 上传文件的后端接口
            type: 'POST', // 请求类型为POST
            data: formData, // 使用FormData对象作为数据
            processData: false, // 不对数据进行处理
            contentType: false, // 不设置请求头的Content-Type
            success: function (response) {
                // 上传成功后的处理
                imgSrc = response.message;
                callback(imgSrc)
            },
            error: function (xhr, status, error) {
                // 上传失败时的处理
                console.log('文件上传失败', error);
            }
        });

2.7、最终效果

http://ip:9000后面的book就是我们创建的book桶,数据在控制台也能看到

在这里插入图片描述

在这里插入图片描述

2.8、问题

如果前端图片或者文件无法显示,是因为我们需要将桶的策略(policy)换成public,改完前端就可以正常显示了
在这里插入图片描述

2.9、防盗链

配置CORS(跨域资源共享)

通过配置CORS,你可以限制哪些域可以访问你的MinIO服务器。这可以防止未经授权的第三方网站嵌入你的资源。

示例:

在MinIO的配置文件中,你可以添加CORS配置来限制访问。以下是一个允许来自https://example.com的GET请求的示例:

<CorsConfig>  
    <CorsRule>  
        <AllowedOrigin>https://example.com</AllowedOrigin>  
        <AllowedMethod>GET</AllowedMethod>  
        <AllowedHeader>*</AllowedHeader>  
        <ExposeHeader>*</ExposeHeader>  
    </CorsRule>  
</CorsConfig>

你可以根据需求添加更多的<AllowedOrigin><AllowedMethod>元素来定义不同的规则。

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

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

相关文章

为什么越来越多的网站使用https,有什么好处?什么是https加密协议?

首先回答“什么是https加密协议&#xff1f;” HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种通过加密传输数据的安全版本的HTTP协议。它使用了SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff08;Transport Layer Security&#xf…

代码混淆技术探究与工具选择

代码混淆技术探究与工具选择 引言 在软件开发中&#xff0c;保护程序代码的安全性是至关重要的一环。代码混淆&#xff08;Obfuscated code&#xff09;作为一种常见的保护手段&#xff0c;通过将代码转换成难以理解的形式来提升应用被逆向破解的难度。本文将介绍代码混淆的概…

LainChain 原理解析:结合 RAG 技术提升大型语言模型能力

摘要&#xff1a;本文将详细介绍 LainChain 的工作原理&#xff0c;以及如何通过结合 RAG&#xff08;Retrieval-Aggregated Generation&#xff09;技术来增强大型语言模型&#xff08;如 GPT 和 ChatGPT 等&#xff09;的性能。我们将探讨 COT、TOT、RAG 以及 LangChain 的概…

千万别碰SLAM,会变得不幸--下阙

0.书接上回 之前的工作内容总结&#xff1a; 1.学习了回环检测的流程&#xff0c;还学习了DLoopDetector算法。 2.修改了vins-mono将匹配和回环到的图片进行保存。 3.找到了一个不是办法的办法来代替pr曲线&#xff0c;指定范围作真值。 4.大致了解了DTW地磁匹配算法&#xff…

SLAM算法与工程实践——SLAM基本库的安装与使用(3):Pangolin库

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

脉冲压缩及MATLAB仿真

文章目录 前言一、脉冲压缩二、MATLAB 仿真1、LFM 脉冲压缩匹配滤波实现测距①、MATLAB 源码②、仿真结果1) LFM 时域波形2) LFM 频域波形3) 两个未分辨目标的合成回波信号4) 脉冲压缩检测距离 2、去协处理仿真①、MATLAB 源码②、仿真结果1) 未压缩回波信号&#xff0c;3个目标…

白皮书 | 分布式存储发展白皮书(2023)

12月1日&#xff0c;在2023云原生产业大会上&#xff0c;中国信通院云大所联合华为、戴尔科技、IBM等分布式存储产业方阵成员单位共同发布《分布式存储发展白皮书&#xff08;2023年&#xff09;》 一、数据智能的需求 &#xff08;一&#xff09;大模型训练需要海量的非结构…

转转闲鱼链接后台搭建教程+完整版源码

最新仿二手闲置链接源码 后台一键生成链接&#xff0c;后台管理教程&#xff1a;解压源码&#xff0c;修改数据库config/Congig 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3 后台一键生成链接&#xff0c;后台管理教…

【二分查找】LeetCode2141: 同时运行 N 台电脑的最长时间

作者推荐 贪心算法LeetCode2071:你可以安排的最多任务数目 本文涉及的基础知识点 二分查找算法合集 题目 你有 n 台电脑。给你整数 n 和一个下标从 0 开始的整数数组 batteries &#xff0c;其中第 i 个电池可以让一台电脑 运行 batteries[i] 分钟。你想使用这些电池让 全…

【微软技术栈】发布自己造的轮子 -- 创建Nuget包(分布操作)

目录 1、您的项目 2、创建 .nuspec 文件 3、一张图片胜过一千个拉取请求 4、包括自述文件 MD 文件 5、构建软件包 6、将包部署到 Nuget.Org 7、手动上传软件包 8、自动化和脚本化部署 9、我们如何构建和部署 ErrLog.IO Nuget 包 10、Nuget统计数据 11、最后的思考 创建 Nuget 包…

Hiera实战:使用Hiera实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

【XILINX】ERROR:Place:1136 - This design contains a global buffer instance

记录一个ISE软件使用过程中遇到的问题及解决方案。 芯片&#xff1a;spartan6 问题 ERROR:Place:1136 - This design contains a global buffer instance, , driving the net,>, that is driving the following (first 30) non-clock load pins. This is not a recommended…

Word文件如何设置为只读模式

如何将word文档设置为只读模式&#xff0c;都有哪些方法呢&#xff1f;今天给大家分享四个设置方法给大家。 方法一&#xff1a;文件属性 常见的、简单的设置方法&#xff0c;不用打开word文件&#xff0c;只需要右键选择文件&#xff0c;打开文件属性&#xff0c;勾选上【只…

linux的定时任务Corntab

安装crontab # yum安装crontab yum install -y crontab# 开机自启crond服务并现在启动 systemctl enable --now crondcron系统任务调度 系统任务调度&#xff1a; 系统周期性所要执行的工作&#xff0c;比如写缓存数据到硬盘、日志清理等。 在/etc/crontab文件&#xff0c;这…

谷歌宣布为Pixel 8 Pro加入Gemini Nano支持;Claude 2.1 的长篇幅提示技巧

&#x1f989; AI新闻 &#x1f680; 谷歌宣布为Pixel 8 Pro加入Gemini Nano支持 摘要&#xff1a;谷歌将为Pixel 8 Pro机型加入对Gemini Nano的支持。Gemini Nano是专为小型设备而构建的模型版本&#xff0c;可在本月的更新中正式登场。该机的录音App将支持要点总结功能&…

IOday5作业

使用两个线程完成两个文件的拷贝&#xff0c;分支线程1完成前一半内容拷贝&#xff0c;分支线程2完成后一半内容的拷贝&#xff0c;主线程完成资源的回收 #include<myhead.h> //定义结构体 struct file {const char* srcfile;//背拷贝文件路径const char* destfile;//拷…

kafka学习笔记--安装部署、简单操作

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

vue中设置滚动条的样式

在vue项目中&#xff0c;想要设置如下图中所示滚动条的样式&#xff0c;可以采用如下方式&#xff1a; ​// 直接写在vue.app文件中 ::-webkit-scrollbar {width: 3px;height: 3px; } ::-webkit-scrollbar-thumb { //滑块部分// border-radius: 5px;background-color: #1890ff;…

性能测试LoadRunner解决动态验证码问题

对于这个问题&#xff0c;通常我们可以采取以下三个途径来解决该问题&#xff1a; 1、第一种方法&#xff0c;也是最容易想到的&#xff0c;在被测系统中暂时屏蔽验证功能&#xff0c;也就是说&#xff0c;临时修改应用&#xff0c;无论用户输入的是什么验证码&#xff0c;都…

IPC之四:使用 POSIX 消息队列进行进程间通信的实例

IPC 是 Linux 编程中一个重要的概念&#xff0c;IPC 有多种方式&#xff0c;本文主要介绍消息队列(Message Queues)&#xff0c;消息队列可以完成同一台计算机上的进程之间的通信&#xff0c;相比较管道&#xff0c;消息队列要复杂一些&#xff0c;但使用起来更加灵活和方便&am…