SpringBoot集成分布式对象存储(分布式文件)MinIO

举报
whisperrr 发表于 2021/08/21 16:29:25 2021/08/21
【摘要】 一句话:MinIO是高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。

  一、什么是MinIO?

  一句话:MinIO是高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。

  你可以把它和FastDFS、HDFS作为类比,但它比其它都更简单,极简是MinIO的设计初衷之一,而且他的性能很好。

  当然也有很多商用的对象存储服务,如阿里的OSS、腾讯的COS,无需自己维护,但需要付费。自建对象存储还是香。

  官网上的一句话: 在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品

  二、如何安装部署?

  下载地址:w w w.minio.org.cn/download.sh…

  启动命令

  # windows

  minio.exe server

  这里面指定了4个分区(至少4个),具体可以根据您的实际情况进行配置。可以四台主机各一个数据存放位置,也可以两台主机各两个存放位置。我这边是四个存放位置都在一台主机上。

  格式是 ip + 存放位置,如 中 为ip地址, E:/person/article-tools/minio/data0为存放位置。

  启动成功后 默认访问地址ht t p://127.0.0.1:9000/ ,默认账号和密码都是: minioadmin,创建一个 test的桶(bucket)。

  三、SpringBoot 集成 MinIO

  pom.xml如下

  org.springframework.boot

  spring-boot-starter-parent

  2.3.2.RELEASE

  4.0.0

  com.llh.minio

  minio-demo

  1.0.0

  minio-demo

  minio-demo

  1.8

  UTF-8

  UTF-8

  2.3.7.RELEASE

  io.minio

  minio

  8.2.2

  org.springframework.boot

  spring-boot-starter-web

  org.projectlombok

  lombok

  1.18.20

  provided

  MinioConfiguration类

  package com.llh.minio.config;

  import io.minio.MinioClient;

  import org.springframework.context.annotation.Bean;

  import org.springframework.context.annotation.Configuration;

  @Configuration

  public class MinioConfiguration {

  private static final String END_POINT = "

  private static final String USERNAME = "minioadmin";

  private static final String PASSWORD = "minioadmin";

  @Bean

  public MinioClient minioClient() {

  return new MinioClient.Builder()

  .endpoint(END_POINT)

  .credentials(USERNAME, PASSWORD)

  .build();

  }

  }

  这里就是配置端口、用户名、密码,注入 MinioClient

  TestController类

  package com.llh.minio.controller;

  import io.minio.GetPresignedObjectUrlArgs;

  import io.minio.MinioClient;

  import io.minio.PutObjectArgs;

  import io.minio.http.Method;

  import org.springframework.web.bind.annotation.GetMapping;

  import org.springframework.web.bind.annotation.PostMapping;

  import org.springframework.web.bind.annotation.RequestParam;

  import org.springframework.web.bind.annotation.RestController;

  import org.springframework.web.multipart.MultipartFile;

  import javax.annotation.Resource;

  import java.util.Objects;

  import java.util.UUID;

  import java.util.concurrent.TimeUnit;

  @RestController

  public class TestController {

  @Resource

  private MinioClient minioClient;

  // 和后台桶名对应

  private static final String TEST_BUCKET = "test";

  @PostMapping("upload")

  public String upload(@RequestParam(name = "file") MultipartFile file) {

  try {

  int idx = Objects.requireNonNull(file.getOriginalFilename()).lastIndexOf(".");

  String suffix = file.getOriginalFilename().substring(idx + 1);

  String fileName = UUID.randomUUID() + "." + suffix;

  // 保存文件

  minioClient.putObject(PutObjectArgs.builder()

  .stream(file.getInputStream(), file.getSize(), PutObjectArgs.MIN_MULTIPART_SIZE)

  .object(fileName)

  .contentType(file.getContentType())

  .bucket(TEST_BUCKET)

  .build());

  return fileName;

  } catch (Exception e) {

  e.printStackTrace();

  return "";

  }

  }

  @GetMapping("getUrl")

  public String getUrl(@RequestParam(name = "path") String path) {

  try {

  // 获取文件访问地址 7天失效

  String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()

  .bucket(TEST_BUCKET)

  .object(path).

  method(Method.GET)

  .expiry(7, TimeUnit.DAYS).build());

  return url;

  } catch (Exception e) {

  e.printStackTrace();

  return "";

  }

  }

  }

  这里是上传文件接口 和 根据path返回访问地址接口

  一般我们数据库存放的是文件名,需要访问的时候调用 getUrl方法获取全路径访问地址。

  MinioDemoApplication启动类

  package com.llh.minio;大连无痛人流哪家好 http://mobile.120wtrlyy.com/

  import org.springframework.boot.SpringApplication;

  import org.springframework.boot.autoconfigure.SpringBootApplication;

  import org.springframework.boot.web.servlet.MultipartConfigFactory;

  import org.springframework.context.annotation.Bean;

  import org.springframework.util.unit.DataSize;

  import javax.servlet.MultipartConfigElement;

  /**

  * @author 小虎哥的技术博客

  */

  @SpringBootApplication

  public class MinioDemoApplication {

  public static void main(String[] args) {

  SpringApplication.run(MinioDemoApplication.class, args);

  }

  @Bean

  public MultipartConfigElement multipartConfigElement() {

  MultipartConfigFactory factory = new MultipartConfigFactory();

  factory.setMaxFileSize(DataSize.ofMegabytes(1024));

  factory.setMaxRequestSize(DataSize.ofMegabytes(1024));

  return factory.createMultipartConfig();

  }

  }

  这里配置单文件上传文件大小为1G,否则文件太大上传会失败。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。