Minio保姆级教程

转载自: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:9000accessKey: 2Oo1pE1YHEFTU3eojldN1secretKey: 2Z5dJ7EHkd5WOYzK7wxtHPkye2Tc824xWzqPzHd7TbucketName: 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;@Beanpublic 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 {@Autowiredprivate MinioClient minioClient;@Autowiredprivate 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 {@Resourceprivate MinioService minioService;@Resourceprivate 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', // 请求类型为POSTdata: formData, // 使用FormData对象作为数据processData: false, // 不对数据进行处理contentType: false, // 不设置请求头的Content-Typesuccess: 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.hqwc.cn/news/263777.html

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

相关文章

Shell数组函数:函数

一、概述 概念&#xff1a; 函数是一段完成特定功能的代码片段&#xff08;块&#xff09;在shell中定义了函数&#xff0c;就可以使代码模块化&#xff0c;使于复用代码注意函数必须先定义才可以使用。 重点&#xff1a; 传参 $1,$2局部变量 local返回值 return 即$? 二、定…

AWS攻略——Peering连接VPC

文章目录 创建IP/CIDR不覆盖的VPC创建VPC创建子网创建密钥对创建EC2 创建Peering接受Peering邀请修改各个VPC的路由表修改美东us-east-1 pulic subnet的路由修改悉尼ap-southeast-2路由 测试知识点 我们回顾下《AWS攻略——VPC初识》中的知识&#xff1a; 一个VPC只能设置在一…

linux7安装python3.12.1教程

1.下载tar.gz包 地址&#xff1a;Python Release Python 3.12.1 | Python.org 2.上传包到linux服并解压 cd /home/local/ ll tar -zxvf Python-3.12.1.tgz 3.安装编译python所需环境 yum install -y gcc yum install -y zlib* yum -y install zlib-devel bzip2-devel opens…

读书笔记-《数据结构与算法》-摘要4[插入排序]

插入排序 核心&#xff1a;通过构建有序序列&#xff0c;对于未排序序列&#xff0c;在已排序序列中从后向前扫描(对于单向链表则只能从前往后遍历)&#xff0c;找到相应位置并插入。实现上通常使用in-place排序(需用到O(1)的额外空间) 从第一个元素开始&#xff0c;该元素可…

【Unity动画】Avatar Mask

创建 Avatar Mask可以设置那一部分骨骼运动和不运动 然后放在状态机里面的层中来混合 【后续完善】

leetcode 100.相同的树

涉及到递归&#xff0c;最好多画图理解&#xff0c;希望对你们有帮助 100.相同的树 题目 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 题目链接…

NAND闪存价格暴涨:512GB芯片翻倍,256GB涨幅达55%

此前&#xff0c;根据Trendforce的信息&#xff0c;今年第四季度NAND的合约价预计上涨8-13%&#xff0c;其中Wafer上涨13-18%。 根据DRAMeXchange最新的数据表明&#xff0c;之前预测的数据还是太保守了&#xff0c;过去一年Wafer NAND价格如下图&#xff1a; DRAM/NAND价格近几…

c语言一维数组总结详解

目录 介绍&#xff1a; 一维整型数组&#xff1a; 声明&#xff1a; 初始化&#xff1a; 打印输出&#xff1a; 输出结果&#xff1a; 浮点型数组&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 补充&#xff1a; 一维字符数组&#xff1a; 字符数组声明及初始…

TCP数据粘包的处理

TCP数据粘包的处理 背锅侠TCP解决方案2.1 发送端2.2 接收端 背锅侠TCP 在前面介绍套接字通信的时候说到了TCP是传输层协议&#xff0c;它是一个面向连接的、安全的、流式传输协议。因为数据的传输是基于流的所以发送端和接收端每次处理的数据的量&#xff0c;处理数据的频率可…

倪海厦:教你正确煮中药,发挥最大药效

同样的一个汤剂&#xff0c;我开给你&#xff0c;你如果煮的方法不对&#xff0c;吃下去效果就没那么好。 所以&#xff0c;汤&#xff0c;取它的迅捷&#xff0c;速度很快&#xff0c;煮汤的时候还有技巧&#xff0c;你喝汤料的时候&#xff0c;你到底是喝它的气&#xff0c;…

如何用Qt配置git项目并上传Gitee

1.进入到Qt项目文件夹内&#xff0c;打开 “Git Bash Here” 2.初始化&#xff0c;在“Git Bash Here”中输入 git init 3.加入所有文件&#xff0c;在“Git Bash Here”中输入 git add . (需要注意&#xff0c;git add 后面还有一个点) 4.添加备注&#xff0c;git com…

普冉(PUYA)单片机开发笔记(8): ADC-DMA多路采样

概述 上一个实验完成了基于轮询的多路 ADC 采样&#xff0c;现在尝试跑一下使用 DMA 的 ADC 多路采样。厂家例程中有使用 DMA 完成单路采样的&#xff0c;根据这个例程提供的模板&#xff0c;再加上在 STM32 开发同样功能的基础&#xff0c;摸索着尝试。 经过多次修改和测试&…