最近公司有存储非结构化数据的需求,所以需要一个文件存储服务器,fastdfs是一个老牌的分布式文件系统,一般都会选择此文件系统,但是fastdfs部署实在繁琐,而且维护也麻烦,所以重新找了其他的,发现Minio简介看上去也挺好用,然后部署也很简单。
这篇文章是我刚开始学习测试MinIo的记录,所以是初学者的视角来使用Minio,之后深入使用会继续更新MinIO的真实体验。
启动MinIO服务
我比较喜欢使用docker,所以用Docker启动Minio服务
docker run -p 9000:9000 -p 9001:9001 --name minio \
-d --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /data/minio/data:/data \
-v /data/minio/config:/root/.minio \
minio/minio server --console-address ":9001" /data
这里存在一个问题
- MINIO_ROOT_USER:用户名,长度最小是5个字符
- MINIO_ROOT_PASSWORD:密码,密码不能设置过于简单,不然minio会启动失败,长度最小是8个字符
因为这个问题,刚开始一直不能启动,我还以为我启动的有问题。一直转圈圈,后来用docker看了一下日志,发现了问题,尴尬。
docker logs 容器ID
Java服务调用
引入相关的Jar包
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.3</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
代码
import io.minio.*;
/**
* @author panlf
* @date 2021/12/6
*/
public class MinioFileUpload {
public static void main(String[] args) {
try{
MinioClient minioClient = MinioClient
.builder().endpoint("http://192.168.164.130:9000")
.credentials("admin","12345678").build();
/*
存储桶的命名定义规则为:
1.存储桶名称必须介于 3 到 63 个字符之间
2.存储桶名称只能由小写字母、数字、句点 (.) 和连字符 (-) 组成
3.存储桶名称必须以字母或数字开头和结尾
4.存储桶名称不得采用 IP 地址格式
*/
String bucketName = "pdf-file";
boolean found = minioClient
.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if(!found){
//如果不存在就创建
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
//上传文件
minioClient.uploadObject(UploadObjectArgs.builder()
.bucket(bucketName)
.object("阿里巴巴Java开发手册1.4.0.pdf")
.filename("C:\\Users\\panlf\\Desktop\\阿里巴巴Java开发手册1.4.0.pdf")
.build());
//下载文件
minioClient.downloadObject(DownloadObjectArgs.builder()
.bucket(bucketName)
.object("阿里巴巴Java开发手册1.4.0.pdf")
.filename("阿里巴巴Java开发手册1.4.0.pdf").build());
}catch (Exception e){
e.printStackTrace();
}
}
}
上面调用服务,突然报错
The difference between the request time and the current time is too large
主要是因为服务器时间差过大,然后服务器需要重新同步一下时间
1. 安装ntp ntpdate
yum -y install ntp ntpdate
2. 与时间服务器同步时间
ntpdate cn.pool.ntp.org
然后就可以正常使用。
总结
初学者来说,Minio服务部署简单,调用代码也很简单,对新手友好,后面看看实际使用体验如何。