前言:
因最新版的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());
}
}