使用Java Minio搭建自己的文件系统详解

目录
  • 前言
  • 1、Minio介绍
  • 2、Minio安装与启动
  • 3、Minio控制台创建存储桶
  • 4、存储桶权限
  • 5、控制台实现文件的上传与下载
  • 6、使用Springboot与Minio整合实现文件的增删查改
    • 6.1、创建项目
    • 6.2、添加依赖
    • 6.3、创建自定义属性与配置类
    • 6.4、功能实现
      • 6.4.1、文件上传
      • 6.4.2、文件下载
      • 6.4.3、查询全部文件
      • 6.4.4、删除指定文件
  • 总结

前言

最近接了一个项目,甲方不愿意买服务器,但是呢,项目又必须要用文件功能。所以很巧,最近又刚好看到了Minio这个牛逼的工具。正好借此机会记录下来此次操作的全部流程。

本次涉及到的功能有:

  • Minio的安装与启动
  • 控制台的使用以及存储桶的创建
  • 存储桶的使用权限说明
  • 使用控制台实现文件上传与下载
  • (重点)使用Springboot与Minio整合实现文件的增删改查

本次使用环境:Centos7.6+finalshell+java

1、Minio介绍

如果你听过这个,那么你直接跳到第二小节看使用说明。如果你不知道这个,但是你最近也正在找一款文件存储的工具,那么你可以先看看这个的介绍。

Minio 是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。区别于分布式存储系统,minio的特色在于简单、轻量级,对开发者友好。

阿里云对象存储你应该清楚,这个和OSS的区别就是,OSS收费,这个是你自己搭建的,不收费,只占磁盘大小。其他的功能都是一毛一样的。

2、Minio安装与启动

首先,我们得先去找到下载地址

  • 下载地址:https://dl.min.io/server/minio/release/linux-amd64/minio

使用我们的终端工具连接上我们的服务器。

步骤:

1.找一个目录,用来存放我们的minio文件

2.使用wget命令,通过下载地址下载下载我们的文件

 wget https://dl.min.io/server/minio/release/linux-amd64/minio

3.给minio这个文件赋予权限,作为文件启动

chmod +x minio

4.使用./minio server start启动

当你能看到这个界面的时候,说明你就成功了。

小提示1:
下面的两个红色的并不是报错,而是警告,也可以是一个建议。
第一句翻译:控制台断点的侦听端口并不是固定的,请使用 --console-address指定端口启动
第二句翻译:默认初始凭证账号和密码是minioadmin和minioadmin 你可以在环境变量中去更改他。但是我这儿就不修改了,如果你想修改你可以去profile下面使用export命名来加上他说的那个变量名来指定账号和密码。
小提示2:
如果你是本地虚拟机,启动后只需要使用ip:9000端口来实现访问,如果访问不了,请关掉防火墙,命令:
systemctl stop firewalld
如果你是云服务器,请放行9000端口和他提示出来的端口。9000作为API端口是不变的,但是你同样可以指定修改他,控制台端口经过我自己测试,他每次启动都会发生改变,所以我们还是建议使用指定端口启动。
小提示3:
我们上面的启动命令,他启动好了之后日志可以指定到目录去存储,只需要将./minio server start 命令更换成 ./minio server /home/minio/data 其中/home/minio/data是我自己定义的目录,你可以随便定义。
第二:启动后会占用控制台,我们也可以将他调整成为后台启动,加上指定的端口,我们就可以完成自定义的设置。具体启动命令如下:
nohup ./minio server --console-address ':41169' /home/minio/data/ > /home/minio/data/minio.log 2>&1 &
意思就是,指定控制台端口为41169,并且生成日志文件到/home/minio/data目录下的minio.log中

访问ip:9000进入登录界面 使用默认账号进行登录

3、Minio控制台创建存储桶

这样就创建好了我们的存储桶。

4、存储桶权限

在创建好存储桶之后,我们为了使用远程连接来访问使用。所以有必要去修改一下存储桶的权限。

我们点击最下面的那个Rules,然后点击右上角创建一个访问规则。可以使用精准匹配,也可以使用通配符。

前缀我们使用* 这样可以匹配全部访问用户,下面的权限我们使用读写。

5、控制台实现文件的上传与下载

我们点到左边的功能栏,然后选择右边我们刚创建的存储桶。然后,,我觉得接下来的操作我都不用细说你们应该都会玩了。

同样,在上传成功后,也提供下载与预览功能。

6、使用Springboot与Minio整合实现文件的增删查改

6.1、创建项目

6.2、添加依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>6.0.11</version>
</dependency>

6.3、创建自定义属性与配置类

minio:
  accesskey: minioadmin
  secretkey: minioadmin
  url: http://ip:9000
  bucketname: zxy-images
@Component
@Data
public class MinioProperties {
    /**
     * API调用地址
     */
    @Value("${minio.url}")
    private String url;
    /**
     * 连接账号
     */
    @Value("${minio.accesskey}")
    private String accessKey;
    /**
     * 连接秘钥
     */
    @Value("${minio.secretkey}")
    private String secretKey;
}
@Configuration
@Slf4j
public class MinioConfig {
    @Resource
    private MinioProperties minioProperties;
    @Bean
    public MinioClient getMinioClient(){
        try {
            return new MinioClient(minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey());
        } catch (InvalidEndpointException | InvalidPortException e) {
            e.printStackTrace();
            log.info("-----创建Minio客户端失败-----");
            return null;
        }
    }
}

6.4、功能实现

6.4.1、文件上传

public void upload(MultipartFile file) throws IOException, XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, InvalidArgumentException, InvalidResponseException, InternalException, NoResponseException, InvalidBucketNameException, InsufficientDataException, ErrorResponseException {
        if (file == null || file.getSize() == 0 || file.isEmpty()) {
            throw new RuntimeException("上传文件为空,请重新上传");
        }
        // 获取文件名
        String filename = file.getOriginalFilename();
        assert filename != null;
        /* 像下面这样写最主要是为了用来做分割,同时也保证文件名是唯一的 */
        String newFilename = UUID.randomUUID().toString() + "|" + filename + filename.substring(filename.lastIndexOf("."));
        minioClient.putObject(bucketName, newFilename, file.getInputStream(), file.getSize(), null, null, file.getContentType());
    }

6.4.2、文件下载

public InputStream download(String fileName, HttpServletResponse response) {
        InputStream inputStream = null;
        // 根据文件名拿到minio中的文件对象
        try {
            ObjectStat object = minioClient.statObject(bucketName, fileName);
            // 设置响应头类型
            response.setContentType(object.contentType());
            inputStream = minioClient.getObject(bucketName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return inputStream;
    }

6.4.3、查询全部文件

public Iterable<Result<Item>> listObjects() {
        try {
            return minioClient.listObjects(bucketName);
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        return null;
    }

6.4.4、删除指定文件

public void deleteFile(String fileName){
        try {
            minioClient.removeObject(bucketName,fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

总结

其实操作并不难,你如果发现了我的操作全都是使用的minioClient来实现的时候,你的重心就应该去放在这个类上面,里面所有的方法都有注释,看一遍就能学会。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 基于Java写minio客户端实现上传下载文件

    前言: 确保已经安装了minio的服务端 代码: pom.xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.0.2</version> </dependency> application.yml server: port:90 minio: url: http://10.69.94.140

  • 基于java+springboot+mybatis+laiyu实现学科竞赛管理系统

    目录 项目背景: 主要功能模块: 主要技术: 主要功能: 功能截图: 数据图主要表设计: 用户表: 菜单表: 项目申请表: 竞赛报名表: 项目总结: 项目背景: 伴随着当今世界信息科技与联网的飞速发展,计算机也在迅速的普及,人们的生活方式已经迈入了以网络为主的时代,每行每业的信息化程度也越来越高,社会和经济发展的主要动力就是网络,随着我们国家对教育的重视程度不断提高,各个学校的学生数量不断增加,学生的校园生活也越来越精彩,学术竞赛.团队比赛也越来越丰富,在竞赛的申请及报名参加过程中,以往的纸质提

  • Java图形化编程之JFrame疫苗接种系统详解

    目录 1.功能模块 1.1登陆模块 1.1.1思路: 1.1.2核心代码: 1.1.3运行效果: 1.2信息展示模块(从txt文件中读取) 1.2.1思路: 1.2.2核心代码 : 1.2.3运行效果: 1.3新增记录模块(并更新txt) 1.3.1思路: 1.3.2核心代码 1.3.3运行效果 1.4删除记录(含多选删除并更新txt) 1.5修改记录(并更新txt) 1.6多条件查询 总结 1.功能模块 1.1登陆模块 1.1.1思路: 利用JFrame弹出一个登陆界面,用户输入admin和1

  • 基于java SSM springboot实现抗疫物质信息管理系统

    主要功能设计: 用户.区域.物质类型.物质详情.物质申请和审核以及我的申请和通知公告以及灵活控制菜单权限 主要技术实现:spring. springmvc. springboot.springboot security权限框架 mybatis . jquery . md5 .bootstarp.js tomcat.器.拦截器等 具体功能模块:用户模块.角色模块.菜单模块.部门模块以及灵活的权限控制,可控制到页面或按钮,满足绝大部分的权限需求 业务模块功能:区域管理.对不同区域的进行管理以及物质发

  • Java访问Hadoop分布式文件系统HDFS的配置说明

    配置文件 m103替换为hdfs服务地址. 要利用Java客户端来存取HDFS上的文件,不得不说的是配置文件hadoop-0.20.2/conf/core-site.xml了,最初我就是在这里吃了大亏,所以我死活连不上HDFS,文件无法创建.读取. <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <co

  • 基于java SSM springboot实现景区行李寄存管理系统

    主要技术实现设计:spring. springmvc. springboot. springboot security权限控制.mybatis .session. jquery . md5 .bootstarp.js tomcat.拦截器等. 主要功能实现设计:登录.用户管理.角色权限管理.菜单管理.部门管理.行李柜管理.用户寄存管理.记录查询管理.通知公告管理.入柜.出柜以及修改密码等操作. 项目介绍 随着中国人对于旅游休闲的积极认识和市场的需求不断增加,各个景区为了满足游客需求也在不断的开发

  • 使用Java Minio搭建自己的文件系统详解

    目录 前言 1.Minio介绍 2.Minio安装与启动 3.Minio控制台创建存储桶 4.存储桶权限 5.控制台实现文件的上传与下载 6.使用Springboot与Minio整合实现文件的增删查改 6.1.创建项目 6.2.添加依赖 6.3.创建自定义属性与配置类 6.4.功能实现 6.4.1.文件上传 6.4.2.文件下载 6.4.3.查询全部文件 6.4.4.删除指定文件 总结 前言 最近接了一个项目,甲方不愿意买服务器,但是呢,项目又必须要用文件功能.所以很巧,最近又刚好看到了Mini

  • Java搭建RabbitMq消息中间件过程详解

    这篇文章主要介绍了Java搭建RabbitMq消息中间件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 当系统中出现"生产"和"消费"的速度或稳定性等因素不一致的时候,就需要消息队列. 名词 exchange: 交换机 routingkey: 路由key queue:队列 控制台端口:15672 exchange和queue是需要绑定在一起的,然后消息发送到exchange再由exchange通过ro

  • 使用Spring Boot搭建Java web项目及开发过程图文详解

    一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者.SpringMVC是非常伟大的框架,开源,发展迅速.优秀的设计必然会划分.解耦.所以,spring有很多子项目,比如core.context.

  • classloader类加载器_基于java类的加载方式详解

    基础概念 Classloader 类加载器,用来加载 Java 类到 Java 虚拟机中.与普通程序不同的是.Java程序(class文件)并不是本地的可执行程序.当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader. JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,BootstrapClassLoader是用本地代码实现

  • java中Spring Security的实例详解

    java中Spring Security的实例详解 spring security是一个多方面的安全认证框架,提供了基于JavaEE规范的完整的安全认证解决方案.并且可以很好与目前主流的认证框架(如CAS,中央授权系统)集成.使用spring security的初衷是解决不同用户登录不同应用程序的权限问题,说到权限包括两部分:认证和授权.认证是告诉系统你是谁,授权是指知道你是谁后是否有权限访问系统(授权后一般会在服务端创建一个token,之后用这个token进行后续行为的交互). spring

  • Java 虚拟机(JVM)之基本概念详解

    1.类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间. 2.方法区:就是存放类信息.常量信息.常量池信息.包括字符串字面量和数字常量等.方法区是辅助堆栈的块永久区,解决堆栈信息的产生,是先决条件. 3.Java堆:再java虚拟机启动的时候建立Java堆,它是java程序最主要的内存工作区域,几乎所有的对象实例都存放到Java堆中,堆空间是所有线程共享的.堆解决的是数据存储问题,即数据怎么放.放在哪儿. 4.直接内存:Java的NIO库允许Ja

  • 使用eclipse + maven一步步搭建SSM框架教程详解

    SSM (SSM 框架集) SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. SpringMVC分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行定制. MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架. 0.系统环境 1)Windows

  • Java日志框架之logback使用详解

    为什么使用logback 记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结一下,logback大约有以下的一些优点: 内核重写.测试充分.初始化内存加载更小,这一切让logback性能和log4j相比有诸多倍的提升 logback非常自然地直接实现了slf4j,这个严格来说算不上优点,只是这样,再理解slf4j的前提下会很容易理解logback,也同时很容易用其他日志框架

  • Java安全框架——Shiro的使用详解(附springboot整合Shiro的demo)

    Shiro简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理 三个核心组件:Subject, SecurityManager 和 Realms Subject代表了当前用户的安全操作 SecurityManager管理所有用户的安全操作,是Shiro框架的核心,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务. Realm充当了Shiro与应用安全数据间的"桥梁"或者"连接器&q

  • Java Spring Boot消息服务万字详解分析

    目录 消息服务概述 为什么要使用消息服务 异步处理 应用解耦 流量削峰 分布式事务管理 常用消息中间件介绍 ActiveMQ RabbitMQ RocketMQ RabbitMQ消息中间件 RabbitMQ简介 RabbitMQ工作模式介绍 Work queues(工作队列模式) Public/Subscribe(发布订阅模式) Routing(路由模式) Topics(通配符模式) RPC Headers RabbitMQ安装以及整合环境搭建 安装RabbitMQ 下载RabbitMQ 安装R

随机推荐