minio文件服务器_SpringBoot集成MinIO文件存储功能

本文介绍了如何将MinIO文件服务器集成到SpringBoot应用中进行文件存储。MinIO是一个高可用、高扩展性的对象存储服务。文章详细讲解了Linux下安装MinIO的过程,并展示了SpringBoot集成MinIO的步骤,包括引入依赖、配置以及服务和控制器的实现。
摘要由CSDN通过智能技术生成

SpringBoot集成MinIO文件存储功能

文件服务器是一个应用必要的组件之一。最早我搞过FTP,然后又用过FastDFS,接私活的时候我用MongoDB也凑合凑合。现如今时代不同了,开始流行起了OSS

协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

什么是OSS

全称为Object Storage Service,也叫对象存储服务,是一种解决和处理离散单元的方法,可提供基于分布式系统之上的对象形式的数据存储服务,具有可拓展、可管理、低成本等特点,支持中心和边缘存储,能够实现存储需求的弹性伸缩,主要应用于海量数据管理的各类场景。

这概念真是够难以理解的。简单说点我知道的吧,平常我们的文件地址都是 /User/felord/video/xxx.mp4的目录树结构,系统先要找到User,然后一级一级往下找一直到目标为止,这是一种结构化的存储方式。对象存储就不一样了,所有的文件都放在一个特定的池子里,只不过文件的携带有它自己的元信息,通过元信息去检索文件。这里举一个形象的例子:

{
    "oss":[
    { "file":"xxxxx","meta":{ "id":"1111"},"type":""},
    { "content":"xxxxx","meta":{ "id":"1211"},"type":"","created":"","name":""}, 
]}

上图的oss就是一个对象存储,它里面存了携带信息不一样、甚至结构都不一样的东西,我们可以根据其元信息meta检索它们。OSS具有以下特点:

  • 效率更高。不受复杂目录系统对性能的影响。

  • 可扩展性更强。分布式架构,更便于进行水平扩展,从而容纳进任意大规模的数据。

  • 可用性更强。数据一般都会有多个位于不同机器的复制,确保数据不丢失。

  • 平台无关,可以通过Restful接口进行操作对象。

OSS通常被用来存储图片、音视频等文件,以及对这些文件的处理。

哪些OSS可以使用

一种是Ceph,一个分布式存储系统,高可用,高扩展性

另一种是Minio,用Golang写的。我目前还没发现有什么坑,文档居然还有中文文档!

23ecf5f656282bf8916131351cbd1b98.png

Linux 下安装MinIO

windows下安装过于简单我们来研究Linux下的安装,不过同样简单

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

# 赋权
chmod +x minio

# 设置用户名
export MINIO_ACCESS_KEY=minioadmin

# 设置密码
export MINIO_SECRET_KEY=minioadmin

# 启动  /home/data是自己定义的文件目录,进入minio的下载目录
./minio server /home/data

# 静默启动 
nohup ./minio server /home/data >/home/data/minio.log 2>&1 &

运行 ./minio server /home/data 看下一下画面即表示启动成功

1b14f4273d11723b605b75a3af832004.png

访问 http://172.28.43.29:9000/minio/login接口看到页面

debca6824190943e727e95b2ca08d0bb.png

SpringBoot 集成MinIO

引入jar包

  <dependency>
        <groupId>io.miniogroupId>
      <artifactId>minioartifactId>
      <version>7.0.2version>
  dependency>

配置

minio:
  endpoint: http://web.codepeople.cn/
  port: 9000
  accessKey: minioadmin
  secretKey: minioadmin
  secure: false
  bucketName: "hkeducation"
  configDir: "/home/data"
package com.hope.minio.config;

import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.checkerframework.checker.units.qual.A;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;


@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {

    @ApiModelProperty("endPoint是一个URL,域名,IPv4或者IPv6地址")
    private String endpoint;

    @ApiModelProperty("TCP/IP端口号")
    private int port;

    @ApiModelProperty("accessKey类似于用户ID,用于唯一标识你的账户")
    private String accessKey;

    @ApiModelProperty("secretKey是你账户的密码")
    private String secretKey;

    @ApiModelProperty("如果是true,则用的是https而不是http,默认值是true")
    private Boolean secure;

    @ApiModelProperty("默认存储桶")
    private String bucketName;

    @ApiModelProperty("配置目录")
    private String configDir;

    @Bean
    public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException {
        MinioClient minioClient = new MinioClient(endpoint, port, accessKey, secretKey,secure);
        return minioClient;
    }
}
package com.hope.minio.utils;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
imp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值