问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

搭建MinIO对象存储

创作时间:
作者:
@小白创作中心

搭建MinIO对象存储

引用
CSDN
1.
https://blog.csdn.net/weixin_44750617/article/details/137457965

对象存储作为企业中数据存储必不可少的工具之一,目前市面上为了方便,大都使用阿里云OSS、腾讯COS等。作为个人使用,其实也可以简单搭建私有的独立IP的对象存储工具,部署在自己的服务器或者是本地的机器上。本文将介绍如何搭建MinIO对象存储以及在SpringBoot项目中使用MinIO。

一、搭建MinIO

Docker方式

启用下面的命令后,文件将存储在容器中的/data目录下。建议持久存储容器中的文件数据,使用-v /opt/minio/data:/data将容器中的/data目录映射到本机上的/opt/minio/data。启动后打开127.0.0.1:9000,默认的账号密码为都为minioadmin。

docker run -p 9000:9000 -p 9001:9001 \
  quay.io/minio/minio server /data --console-address ":9001"
# 建议自己做映射
#docker run -p 9000:9000 -p 9001:9001 \
#  -v /local/path:/data \
#  quay.io/minio/minio server /data --console-address ":9001"

Mac方式

使用brew下载安装minio,没有brew的先看下怎么安装brew

# 使用brew安装minio
brew install minio/stable/minio
# 启动minio,替换/data为本地路径/Users/xxx/Downloads
minio server /data

Linux方式

二进制方式进行安装:

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
# 替换/data为本地路径
./minio server /data

安装启动完成后,使用http://127.0.0.1:9000 打开,创建一个名称为test的桶。

二、SpringBoot中使用

引入依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.0.3</version>
</dependency>

配置相关参数

在properties文件中定义相关配置:

# ip和端口
minio.endpoint=127.0.0.1
minio.port=9000
# 账号密码
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.secure=false
# 桶的名称
minio.bucketName=test

定义Bean

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 = "minio")
public class MinioConfig {
    private String endpoint;
    private int port;
    private String accessKey;
    private String secretKey;
    private Boolean secure;

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

文件上传示例

在需要的地方引入使用MinioClient,后续可以自己封装为一个工具类:

@Resource
private MinioClient minioClient;

/**
 * 上传文件
 * @param file 文件
 * @param folder 目录
 */
public void upload(MultipartFile file, String folder) {
    String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
    String uploadName = System.currentTimeMillis() + "." + suffix;
    // 文件路径
    String finalName = folder + "/" + uploadName;
    try {
        PutObjectArgs build =
                PutObjectArgs.builder()
                        .bucket("test")
                        .object(finalName)
                        .contentType(file.getContentType())
                        .stream(file.getInputStream(), file.getSize(), -1)
                        .build();
        minioClient.putObject(build);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

想要搭建图床的话上床图片到MinIo中的话,可以自己写一个程序,在代码中实现上传到MinIo中,对于自定义图床的实现,可以参考我的另一篇文章自定义图床。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号