MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
使用Minio搭建文件服务器,相比FASTDFS的搭建,使用Minio搭建文件服务器更方便快捷些。下面我们基于docker来安装minio,记得先安装docker。
拉取镜像
docker pull minio/minio
启动容器
docker run -d -p 9000:9000 --name minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin123456" -v /mnt/data:/data -v /mnt/config:/root/.minio minio/minio server /data
MINIO_ACCESS_KEY
是账号;MINIO_SECRET_KEY
是密码(最少8位,不能太简单,否则会启动失败),一会网页登陆需要。 /mnt/data
是映射目录。
访问http://192.168.0.1:9000 即可进入:
可以通过sdk进行文件的上传,官方提供支持js、Java、python等的sdk,操作非常方便。
配置nginx(非必需, 配置后可以通过域名访问)
server{
listen 80;
server_name image.demo.com;
location /{
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
location ~ /\.ht {
deny all;
}
}
使用Java的sdk上传文件
添加依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
java代码实现
try{
// 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
MinioClient minioClient = new MinioClient("http://192.168.56.102:9000", "admin", "admin123456");
// 检查存储桶是否已经存在
boolean isExist = minioClient.bucketExists("images");
if(isExist) {
System.out.println("Bucket already exists.");
} else {
// 创建一个名为images的存储桶,用于存储照片
minioClient.makeBucket("images");
}
// 使用putObject上传一个文件到存储桶中。
minioClient.putObject("images", "20210317001.png", "C:\\Users\\Administrator\\Downloads\\minio.png");
}catch (Exception e){
e.printStackTrace();
}
解决minio的访问链接的有时间限制的问题,即实现永久访问链接
我们上传文件到Bucket里面后,选择文件后面的分享按钮时,必须有文件有效期;为了实现minio链接能够永久有效,我们需要选择Bucket设置相关的读写权限(比如readOnly等)
这样就可以直接访问了,访问链接就不用直接加minio了,只需要使用对应目录即可如:http://192.168.56.102:9000/images/20210317001.png
这样一个类似于阿里云这些云服务商提供的OOS对象存储功能就实现了。