前言
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
语言。
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
配置实体:
@Data
@ConfigurationProperties(prefix =
"min.io")
public class MinIoProperties {
private
String
endpoint;
private
String
accessKey;
private
String
secretKey;
}
@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
可供选择,小白用户是不是美滋滋。
本文分享自微信公众号 - 爪哇笔记(Java_notes)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/1454863/blog/4723314