Windows安装Minio(超详细)以及springboot中使用

33d13b3497064da09157601ba0ab70f0.png

Minio是什么?

Minio是一个开源的、云原生分布式对象存储系统,是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。

它一大特点就是轻量,虽然轻量,却拥有着不错的性能。使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。

官网:https://www.minio.org.cn

Windows环境安装Minio

1、下载服务端和客户端安装包文件

下载地址:MinIO | Code and downloads to create high performance object storage

服务端文件:minio.exe 用于接收文件信息

客户端文件:mac.exe 用于上传文件 ,如果用程序代码操作文件存储,只启动服务端就ok

af3affbe834447e2a8e94ac6f8812460.png

70c437855b7240ef9d1955f202066b34.png

2、创建minio目录

1、创建一个minio的文件夹,存放minio相关文件

2、在minio文件夹中创建minio的应用目录bin,存放mc.exe 以及minio.exe 文件 。

3、在minio文件夹中创建minio的数据目录data,存放相关数据文件

4、在minio文件夹中创建minio的数据目录log,存储相关日志

(以上目录名称可以随便命名,不建议中文哦)

2104060b88ea4043847695852ae6efbf.png

fda7f75b9fd04503914f9ba317415efe.png

3、启动minio服务器

启动方式有两种,个人比较推荐第一种命令启动哈

1、命令启动

2、新建.bat文件启动

特别提示:在windows 安装软件我们都习惯双击.exe 文件启动。minio可不行奥,可不行,可不行。千万不能去双击运行,这样可能会导致最终启动失败;无论是windows还是linux都建议通过命令启动的。懂的打个懂。

dda49ff6bdca4b47af11871b4626664e.jpeg

在这里就主要介绍下命令启动

3.1、以管理员权限打开cmd窗口,进入到minio.exe所在bin目录

2b72c2b0ae4f488d880b6cd4cb90840b.png

3.2、设置用户名

用于登录minio客户端

setx MINIO_ROOT_USER admin 

e1e0a947f9c14a13835dba2e4e1b6a3d.png

3.3、设置登录密码

 setx MINIO_ROOT_PASSWORD 123456

b30133148b8f4f5490f40e20d1cc7317.png

3.4、启动Minio服务

.\minio.exe server E:\minio\data --console-address "127.0.0.1:9000" --address "127.0.0.1:9005"

D:\minio\data 指定数据存放路径

9005是控制台端口,9000是服务的端口。

image-20240803160324993

4.5、访问minio服务器

访问客户端地址 http://127.0.0.1:9000/ 输入用户密码

112de4daaa654677a2dc8810101e8809.png

79d9d8bc86364ac393003bb94251b0b7.png

点击桶名称,可以看到该桶内的所有文件

056c442951ae46a2a0f1b6f598a27a7e.png

点击Upload按钮可以上传文件,当然点击文件也可以下载哦

到这里minio在windows安装就成功了哦。

4.使用minio

新建buckets

img

image.png

image.png

设置匿名用户的访问权限

img

手动上传文件

image.png

新建路径,不是必须的

image.png

上传文件

点击"upload",选择上传的文件即可

image.png

image.png

访问路径

注意:端口号是9000

SpringBoot中使用

导入jar

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

配置类

minio:
  endpoint: http://192.168.1.102:9000
  accessKey: minioadmin
  secretKey: minioadmin
  # accessKey: tfhXFoXuSlLNMQHHV35F
  # secretKey: com0CFFwJj3zYohIfX4JqGbYMVKVir4BbIyje9r8
  bucketName: myproject
package com.qfedu.springbootminio.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * minio属性类
 */
@Data
// 通过指定的前缀,绑定配置文件中的配置
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {

    /**
     * 端点
     */
    private String endpoint;
    
    private String accessKey;
    
    private String secretKey;

    /**
     * 桶名称
     */
    private String bucketName;
}
package com.qfedu.springbootminio.config;

import io.minio.MinioClient;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * minio配置类
 */
@Component
// 使@ConfigurationProperties注解修饰的类生效,
// 或者不使用该注解,但是在@ConfigurationProperties注解修饰的类上使用@Component
@EnableConfigurationProperties(MinioProperties.class)
public class MinioConfig {
    @Resource
    private MinioProperties minioProperties;

    /**
     * 创建 MinIO 客户端
     */
    @Bean
    public MinioClient getMinioClient() {
        MinioClient minioClient = MinioClient.builder().endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build();
        return minioClient;
    }
}

minio的操作类

package com.qfedu.springbootminio.config;

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * minio工具类
 */
@Component
public class MinioUtil {

    @Value("${minio.bucketName}")
    private String bucketName;

    @Autowired
    private MinioClient minioClient;

    /**
     * 判断bucket是否存在,不存在则创建
     */
    public void existBucket(String name) {
        try {
            boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
            if (!exists) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 文件上传
     *
     * @param file
     * @return
     */
    public String upload(MultipartFile file) {

        // 如果桶不存在,直接创建
        existBucket(bucketName);

        // 获取原始文件名
        String fileName = file.getOriginalFilename();

        // 修改文件名,按照指定的规则修改,本例增加了一个时间戳
        String[] split = fileName.split("\\.");
        if (split.length > 1) {
            fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
        } else {
            fileName = fileName + System.currentTimeMillis();
        }
        InputStream in = null;
        try {
            in = file.getInputStream();
            // 上传到minio
            minioClient.putObject(PutObjectArgs.builder()
                    .bucket(bucketName) //.bucket("img/" + bucketName)
                    .object(fileName)
                    .stream(in, in.available(), -1)
                    .contentType(file.getContentType())
                    .build()
            );
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        // 返回上传的文件名
        return fileName;
    }


}

测试控制器

package com.qfedu.springbootminio.config;

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 TestController {

    @Resource
    private MinioUtil minioUtil;

    @PostMapping("/upload")
    public String upload(MultipartFile multipartFile) {
        return minioUtil.upload(multipartFile);
    }
}

import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

@RestController
public class TestController {

@Resource
private MinioUtil minioUtil;

@PostMapping("/upload")
public String upload(MultipartFile multipartFile) {
    return minioUtil.upload(multipartFile);
}

}


  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值