linux安装minio并使用

发布于:2025-06-24 ⋅ 阅读:(15) ⋅ 点赞:(0)

前言:

因最新版的minio无法在后台管理页面配置用户及权限,根据官方文档总结本文,通过管理工具mc命令,进行用户管理及权限配置。

官网文档及下载地址:

https://min.io/download?view=aistor-custom

1、下载并安装

1.1 命令下载及安装

sudo dnf install minio.rpm

mkdir ~/minio

minio server ~/minio --console-address :9001

1.2 验证安装

打开浏览器访问:http://localhost:9001
默认账号密码均为:minioadmin
在这里插入图片描述

1.3 安装管理客户端

官网安装地址:

https://min.io/docs/minio/linux/reference/minio-mc.html

或通过 命令下载及安装

wget https://dl.min.io/client/mc/release/linux-amd64/mc

chmod +x mc

sudo mv mc /usr/local/bin/mc

1.4 验证mc安装

mc alias set myminio http://127.0.0.1:9000 minioadmin minioadmin

在这里插入图片描述
如图显示连接成功

1.5 常用命令

新增用户

mc admin user add myminio newuser newusersecret

例:
在这里插入图片描述

删除用户

mc admin user rm myminio demo1

在这里插入图片描述

添加分组

mc admin group add  myminio groupname username

例:
在这里插入图片描述
查看分组

mc admin group ls  myminio

mc admin group info  myminio group1

例:
在这里插入图片描述

为用户demo1创建密钥

mc admin accesskey create  myminio demo1    --access-key demo1accesskey   --secret-key demo1secretkey 

在这里插入图片描述
给用户demo1添加读写权限

mc admin policy attach  myminio readwrite --user demo1

在这里插入图片描述
修改默认管理员账号密码

vim ~/.bashrc
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin123

保存,退出,刷新环境变量

source ~/.bashrc

重启minio

2. java使用minio

2.1 引入依赖

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

2.2更改application.yml配置

minio:
  endpoint: http://192.168.52.152:9000
  accesskey: demo1accesskey
  secretkwy: demo1secretkey

2.3 添加配置类

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

/**
 * minio 属性值
 */
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
    //连接url
    private String endpoint;
    //公钥
    private String accesskey;
    //私钥
    private  String secretkwy;
}


import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * minio核心配置类
 * 通过注入 MinIO 服务器的相关配置信息,得到 MinioClient 对象,我们上传文件依赖此对象
 */
@Configuration
public class MinioConfig {

    @Autowired
    private MinioProp prop;

    /**
     * 获取 MinioClient
     * @return MinioClient
     */
    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder().endpoint(prop.getEndpoint()).
                credentials(prop.getAccesskey(),prop.getSecretkwy()).build();
    }
}

2.4 工具类


import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Item;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

/**
 * minio操作类
 */
@Component
public class MinioUtils {
    @Autowired
    private MinioClient client;
    @Autowired
    private MinioProp minioProp;

    /**
     * 创建桶
     *
     * @param bucketName 桶名称
     */
    @SneakyThrows
    public void createBucket(String bucketName) {
        boolean found =
                client.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        if (!found) {
            client.makeBucket(
                    MakeBucketArgs.builder()
                            .bucket(bucketName)
                            .region("cn-beijing")
                            .build());
        }
    }

    /**
     * 删除桶
     *
     * @param bucketName 桶名称
     */
    @SneakyThrows
    public void removeBucket(String bucketName) {
        client.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
    }

    /**
     * 获取文件信息
     *
     * @param bucketName 桶名称
     * @param objectName 文件名称
     * @return
     */
    @SneakyThrows
    public StatObjectResponse getObjectInfo(String bucketName, String objectName) {
        return client.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
    }

    /**
     * 上传文件
     *
     * @param bucketName 桶名称
     * @param objectName 文件名
     * @param stream     流
     * @param fileSize   文件大小
     * @param type       文件类型
     * @throws Exception
     */
    public void putObject(String bucketName, String objectName, InputStream stream, Long fileSize, String type) throws Exception {
        client.putObject(
                PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
                        stream, fileSize, -1)
                        .contentType(type)
                        .build());
    }


    /**
     * 判断文件夹是否存在
     *
     * @param bucketName 桶名称
     * @param prefix     文件夹名字
     * @return
     */
    @SneakyThrows
    public Boolean folderExists(String bucketName, String prefix) {
        Iterable<Result<Item>> results = client.listObjects(ListObjectsArgs.builder().bucket(bucketName)
                .prefix(prefix).recursive(false).build());
        for (Result<Item> result:results){
            Item item = result.get();
            if (item.isDir()){
                return true;
            }
        }
        return false;
    }

    /**
     * 创建文件夹
     * @param bucketName 桶名称
     * @param path 路径
     */
    @SneakyThrows
    public void createFolder(String bucketName,String path) {
        client.putObject(PutObjectArgs.builder().bucket(bucketName).object(path)
                .stream(new ByteArrayInputStream(new byte[]{}),0,-1).build());
    }

    /**
     * 获取文件在minio在服务器上的外链
     * @param bucketName 桶名称
     * @param objectName 文件名
     * @return
     */
    @SneakyThrows
    public String getObjectUrl(String bucketName,String objectName){
        return client.getPresignedObjectUrl(
                     GetPresignedObjectUrlArgs.builder()
                           .method(Method.GET)
                          .bucket(bucketName)
                          .object(objectName)
                          .build());
    }

}


网站公告

今日签到

点亮在社区的每一天
去签到