1. 什么是MINIO?
- 如果你使用过阿里的OSS,如果你使用过GFS,你会比较清楚什么是对象存储。简单的说,对象存储就是一个用来放东西的地方。如果你是初学者,你只需要知道这一点。MINIO就是一个部署在某个服务器上的文件系统,他提供了一个文件夹来保存你需要保存的文件。
2. 安装
3. First bite on MINIO
项目依赖
- 此时官网最新的Java依赖已经来到了8.5.3, 目前MINIO的更新频率非常高,而且代码变动也比较大,所以这里务必要多查看官网。这里演示的版本使用了8.4.3
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>
基础测试环境配合
@Configuration
public class MinIOConfiguration {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Bean
public MinioClient minioClient() {
MinioClient minioClient =
MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
return minioClient;
}
}
基础概念 bucket
- 一个bucket即一个逻辑的文件分区,物理上可能对应的不止一个硬盘。
创建和查看bucket
@Test
void bucketCreate() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
String bucketName = "randombucket";
MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().objectLock(false).bucket(bucketName).build();
minioClient.makeBucket(makeBucketArgs);
List<Bucket> buckets = minioClient.listBuckets();
buckets.forEach(bucket -> {
System.out.println(bucket.name());
});
}
测试时发现,bucketname有一些限制:
- 不能出现大写字母
- 不能出现下划线
- 短横杠是支持的,比如:my-bucket
删除bucket
@Test
void deleteBucket() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
minioClient.removeBucket(RemoveBucketArgs.builder().bucket("my-bucket").build());
}
遍历某个bucket中的对象
- 关键参数:recursive ,默认是false,当是false的时候,只会遍历出当前bucket根路径下的文件,不会进入下一层级文件。
@Test
void testIterator() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
Iterable<Result<Item>> gulimall = minioClient.listObjects(ListObjectsArgs.builder().bucket("gulimall").recursive(true).build());
Iterator<Result<Item>> iterator = gulimall.iterator();
while (iterator.hasNext()) {
Result<Item> result = iterator.next();
Item item = result.get();
System.out.println(item.objectName());
}
}
Minio生成的分享链接是localhost导致无法访问的问题
- 修改minio的配置文件 添加MINIO_SERVER_URL
#NIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.
MINIO_VOLUMES="/mnt/data"
# MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server
# MinIO assumes your network control plane can correctly resolve this hostname to the local machine
MINIO_SERVER_URL="http://192.168.31.101:9999"
#修改默认的端口和控制台端口
MINIO_OPTS="--address :9999 --console-address :9001"
~