SpringBoot 2.x 开发案例之整合MinIo文件服务
前言
在之前的图床开发中撸主曾使用了分布式文件服务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
可供选择,小白用户是不是美滋滋。
重要的是她不仅可以作为文件服务,还可以当做私人网盘使用,一举两得岂不美滋滋。
源码

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
2020年5月阿里云针对大小企业和个人推出阿里云建站模式 ----详细优惠请查收
使用阿里云建网站的三种方式购买云服务器手动建站、云速成美站模板建站或者选择阿里云定制建站三种方式,站长分享利用阿里云创建网站的三种方式及优势对比: 阿里云建站方法汇总 使用阿里云建站可以有三种方式,一种是购买ECS云服务器,然后自行手动搭建网站,需要技术门槛;第二种方式是购买阿里云官网云速成美站,使用模板建站,阿里云提供上千套模板,模板建站价格便宜,会打字就会建站;第三种是使用阿里云官方定制建站,需要什么样的网站什么功能,阿里云建站专家提供一对一网站定制。参考下表: 有需要的朋友可以提前领取优惠劵,后期可以为大家减少不少成本点击领取云小站卷 阿里云建站方式 所需产品 优势 适用人群 自助建站 ECS云服务器 自行购买云服务器,手动搭建网站 需要些技术门槛,适用于刚接触云计算或对云服务器和建站不太了解、希望自行设计网站的个人或小企业用户。 模板建站 云·速成美站 使用阿里云提供上千套模板,可视化后台管理,会打字就会建站 适合有一定软件应用能力的个人或小企业用户,模板建站支持Web站点、移动端站点、互动表单以及会员支付多场景。 定制建站 云·企业网站定制和功能定制 由阿里云专业网站设计师完...
-
下一篇
Flink Weekly | 每周社区动态更新-20200429
大家好,本文为 Flink Weekly 的第十四期,由李本超整理,伍翀 Review。本期主要内容包括:近期社区开发进展、邮件问题答疑、Flink 最新社区动态及技术文章推荐等。 Flink 开发进展 1.Release ■ Dian Fu 宣布 1.9.3 发布。 [1]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/ANNOUNCE-Apache-Flink-1-9-3-released-td40730.html ■ Yu Li 发起了 1.10.1 RC1 的投票。 [2]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-Release-1-10-1-release-candidate-1-td40724.html ■ Piotr Nowojski 和 Zhijiang 同步了一下 1.11 的开发进度。 [3]http://apache-flink-mailing-list-archive.1008284.n3.n...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL数据库在高并发下的优化方案
- Docker容器配置,解决镜像无法拉取问题