分享一款炒鸡好用的网盘+文件服务器

拥有回忆 提交于 2021-01-22 10:06:36
点击▲关注 “ 爪哇笔记 ”   给公众号标星置顶
更多精彩 第一时间直达

前言

在之前的图床开发中撸主曾使用了分布式文件服务 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支持接入 JavaScriptJavaPythonGolang等多种语言,这里我们选择最熟悉的 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源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!