前言
minio是什么就不多介绍了,直接看上面即可。只需要知道,在项目中需要使用文件存储服务但是又不想使用阿里云,七牛云,华为云等提供的收费的OSS服务,那么就可以考虑使用Minio来存储文件。
本文不讲解任何minio的相关知识,只包含Minio的使用,环境是Centos7。
项目使用的是单机版本的minio,不是分布式版本,因此没有检错纠错数据还原的功能
安装与部署
首先是安装
按照官方文档一样,下载minio并且启动运行
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio #启动minio server服务,指定数据存储目录/mnt/data ./minio server /mnt/data
安装和启动完毕之后,初始状态如下
同时注意看,这里还为我们提供了API以及Console的地址
我们想要使用MNIO的API来操控MINIO就需要用到这个端口和ip,ip就是这台服务器的ip
而如果我们想要在控制台看到minio,就使用Console后面为我们提供的端口即可。
这里需要注意,minio的控制台的端口是会动态改变的,所以下一次启动后就可能变化了,我们可以通过命令来设定,如下。
首先,minio的默认的配置目录是${HOME}/.minio,可以通过–config-dir命令自定义配置目录
./minio server --config-dir /mnt/config /mnt/data
控制台监听端口是动态生成的,可以通过–console-address “:port”指定静态端口,方式如下
./minio server --console-address ":46021" /mnt/data
设定用户名和密码的方式如下,这里minio要求用户名长度大于3个字符,密码大于8个字符。
如果配置了这两个环境变量,就不会出现红色警告
账号和密码就是人家给你的,端口用人家给你的即可
之后我们可以先创建一个bucket,它具有隔离的特性,并且它是顶级目录
然后我们查看一下对应的挂载目录
上面的版本使用的是手动下载,我们也可以使用docker
# 在docker里面下载minio docker pull bitnami/minio # 之后使用docker run命令来运行minio docker run -dt \ -p 9000:9000 -p 46021:46021 \ -e "MINIO_ROOT_USER=towelove" \ -e "MINIO_ROOT_PASSWORD=towelove" \ -v /mnt/data:/data \ -v /mnt/config:/root/.minio \ --name "minio_local" \ bitnami/minio:latest server --console-address ":46021"
如果说想要部署分布式的minio,你需要很多个minio的节点,并且确保他们是可以互相通信的。然后在着每一个服务器上部署完毕minio之后,按照如下方式,就可以获取一个minio的分布式集群,部署集群能获得特别好的效果速度以及安全性,但是很麻烦,这里就单机使用就好了,主要是为了下面整合SpringBoot项目使用
minio server http://192.168.146.11/data1 http://192.168.146.12/data2 http://192.168.146.13/data3 http://192.168.146.14/data4
MC下载
wget http://dl.min.io/client/mc/release/linux-arm64/mc
SpringBoot整合Minio
SpringBoot的版本是2.7.7,然后导入如下依赖即可
如果在运行过程中出现其他报错,可以百度或者看看报错是否和我其他博客中出现的一样,Minio的坑还是很多的
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.3</version> </dependency> <dependency> <groupId>me.tongfei</groupId> <artifactId>progressbar</artifactId> <version>0.5.3</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.1</version> </dependency>
首先在配置文件中引入你minio的url,并且提供密码以及对应的桶名称
package com.towelove.file.service.impl; import com.towelove.file.config.MinioConfig; import com.towelove.file.service.ISysFileService; import com.towelove.file.utils.FileUploadUtils; import io.minio.BucketExistsArgs; import io.minio.MinioClient; import io.minio.PutObjectArgs; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; /** * Minio 文件存储 * * @author 张锦标 */ @Service public class MinioSysFileServiceImpl implements ISysFileService { @Autowired private MinioConfig minioConfig; @Autowired private MinioClient minioClient; /** * 本地文件上传接口 * * @param file 上传的文件 * @return 访问地址 * @throws Exception */ @Override public String uploadFile(MultipartFile file) throws Exception { String fileName = FileUploadUtils.extractFilename(file); //判断桶是否存在 boolean found = minioClient.bucketExists(BucketExistsArgs.builder() .bucket(minioConfig.getBucketName()).build()); if (found) { InputStream is = file.getInputStream(); System.out.println("my-bucketname exists"); PutObjectArgs args = PutObjectArgs.builder() .bucket(minioConfig.getBucketName()) .object(fileName) .stream(is, file.getSize(), -1) .contentType(file.getContentType()) .build(); minioClient.putObject(args); is.close(); return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName; } else { System.out.println("my-bucketname does not exist"); throw new RuntimeException("my-bucketname " + minioConfig.getBucketName() + " does not exist"); } } }
之后就可以使用apifox进行测试了