前语
在之前的图床开发中撸主曾运用了分布式文件服务FASTDFS
和阿里云的OSS
目标存储来存储妹子图。怎么办OSS太贵,FASTDFS
建立装备又太繁琐,今日给咱们引荐一款极易上手的高性能目标存储服务MinIO
。
简介
MinIO
是高性能的目标存储,兼容 Amazon S3
接口,充分考虑开发人员的需求和体会;支撑分布式存储,具有高扩展性、高可用性;布置简略但功用丰厚。官方的文档也很具体。它有多种不同的布置形式(单机布置,分布式布置)。
为什么说 MinIO
简略易用,原因就在于它的发动、运转和装备都很简略。能够经过 docker
方法进行装置运转,也能够下载二进制文件,然后运用脚本运转。
装置
引荐运用 docker
一键装置:
docker run -it -p 9000:9000 --name minio
-d --restart=always
-e "MINIO_ACCESS_KEY=admin"
-e "MINIO_SECRET_KEY=admin123456"
-v /mnt/minio/data:/data
-v /mnt/minio/config:/root/.minio
minio/minio server /data
留意:
- 密钥有必要大于8位,否则会创立失利
- 文件目录和装备文件一定要映射到主机,你懂得
整合Nginx
:
server{
listen 80;
server_name minio.cloudbed.vip;
location /{
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
location ~ /.ht {
deny all;
}
}
这样,经过浏览器拜访装备的地址,运用指定的 MINIO_ACCESS_KEY
及 MINIO_SECRET_KEY
登录即可。
简略看了一下,功用还算能够,支撑创立Bucket
,文件上传、删去、共享、下载,一起能够对Bucket
设置读写权限。
整合
Minio
支撑接入JavaScript
、Java
、Python
、Golang
等多种言语,这儿咱们挑选最了解的Java
言语,运用最盛行的结构 SpringBoot 2.x
。
pom.xml
引进:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
application.properties
引进:
# MinIo文件服务器
min.io.endpoint = http://minio.cloudbed.vip
min.io.accessKey = admin
min.io.secretKey = admin123456
MinIoProperties.java
装备实体:
/**
* 实体类
* 爪哇笔记:https://blog.52itstyle.vip
*/
@Data
@ConfigurationProperties(prefix = "min.io")
public class MinIoProperties {
private String endpoint;
private String accessKey;
private String secretKey;
}
撸一个东西类:
/**
* 东西类
* 爪哇笔记:https://blog.52itstyle.vip
*/
@Component
@Configuration
@EnableConfigurationProperties({MinIoProperties.class})
public class MinIoUtils {
private MinIoProperties minIo;
public MinIoUtils(MinIoProperties minIo) {
this.minIo = minIo;
}
private MinioClient instance;
@PostConstruct
public void init() {
try {
instance = new MinioClient(minIo.getEndpoint(),minIo.getAccessKey(),minIo.getSecretKey());
} catch (InvalidPortException e) {
e.printStackTrace();
} catch (InvalidEndpointException e) {
e.printStackTrace();
}
}
/**
* 判别 bucket是否存在
* @param bucketName
* @return
*/
public boolean bucketExists(String bucketName){
try {
return instance.bucketExists(bucketName);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 创立 bucket
* @param bucketName
*/
public void makeBucket(String bucketName){
try {
boolean isExist = instance.bucketExists(bucketName);
if(!isExist) {
instance.makeBucket(bucketName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件上传
* @param bucketName
* @param objectName
* @param filename
*/
public void putObject(String bucketName, String objectName, String filename){
try {
instance.putObject(bucketName,objectName,filename,null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件上传
* @param bucketName
* @param objectName
* @param stream
*/
public void putObject(String bucketName, String objectName, InputStream stream){
try {
instance.putObject(bucketName,objectName,stream,null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删去文件
* @param bucketName
* @param objectName
*/
public void removeObject(String bucketName, String objectName){
try {
instance.removeObject(bucketName,objectName);
} catch (Exception e) {
e.printStackTrace();
}
}
//省掉各种CRUD
}
现在SDK
不支撑文件夹的创立,假如想创立文件夹,只能经过文件的方法上传并创立。
minIoUtils.putObject("itstyle","妹子图/爪哇妹.jpg","C:\爪哇妹.jpg");
一个实例只能有一个账号,假如想运用多个账号,需求创立多个实例。此外 minio
还支撑单主机,多块磁盘以及分布式布置,不过关于大部分单体运用来说,单体现已够用了。
小结
撸主在夜深人静的时分花了半个多小时就搞定了,是不是很简略,一键傻瓜式装置,丰厚的SDK
可供挑选,小白用户是不是乐滋滋。
重要的是她不只能够作为文件服务,还能够作为私家网盘运用,一箭双雕岂不乐滋滋。
源码
https://gitee.com/52itstyle/spring-boot-tools
发表评论