3

一、MinIO简介

MinIO是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

二、安装

Docker 安装

稳定版

docker run -p 9000:9000 \
  -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
  -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
  minio/minio server /data

尝鲜版

docker run -p 9000:9000 \
  -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
  -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
  minio/minio:edge server /data

启动之后,可以访问到文件存储服务:

http://127.0.0.1:9000        (浏览器访问)
http://192.168.56.10:9000/minio/login

根据安装时设置的密钥登录后台,然后创建一个桶 bucket,上传两张图片测试一下:

可以看到,该文件存储服务还是杠杠滴~

三、使用

1、简介

  • 1、使用minIO单bucket存储获取删除对象(文件)
  • 2、也可以获取对象输入流、直接写入输出流
  • 3、支持多个bucket,也兼容v1.0.0的配置默认bucket
  • 4、可创建和删除bucket

2、使用方法

引入依赖

<dependency>
    <groupId>com.jvm123</groupId>
    <artifactId>minio-spring-boot-starter</artifactId>
    <version>1.1.0</version>
</dependency>

配置:

file:
  store:
    minio:
      endpoint: http://192.168.80.106:9000
      bucket: test
      access-key: admin
      secret-key: admin123
      tmp-dir: ./tmp/
      tmp-clean: true
      tmp-first-clean-time: 2020-1-17 11:45:00
      tmp-clean-period: 12960000
      tmp-alive-duration: 12960000

如果不配置默认bucket,则需要在使用api时指定。存储时指定的bucket如果不存在,则会自动创建。
tmp-dir 为api中返回File类型的缓存目录,这个目录会按照FIFO规则定时清理。如果使用返回InputStream的api,则不会有缓存。

tmp-clean如果设置为false,则后续的tmp相关配置也不会生效。只有在使用getFile api时,才会产生缓存,若确定不使用这个,则可以关闭tmp-clean。

使用
兼容v1.0.0的所有用发,新增的示例如下:

package com.jvm123.demo;

import com.jvm123.minio.service.FileStoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author yawn http://jvm123.com
 * 2020/1/15 17:17
 */
@RestController
public class TestController {

    @Autowired
    FileStoreService fileStoreService;

    @GetMapping("test2")
    public void test2(HttpServletResponse response) throws IOException {
        String bucketName = "demo-bucket";

        // 创建bucket
        boolean created = fileStoreService.createBucket(bucketName);

        // 存储文件
        String saved = fileStoreService.save(bucketName, new File("C:\asd.txt"), "a.txt");

        // 删除文件
        boolean deleted = fileStoreService.delete(bucketName, "a.txt");

        // 获取文件(会产生本地缓存)
        File file = fileStoreService.getFile(bucketName, "a.txt");

        // 获取输入流
        InputStream inputStream = fileStoreService.getStream(bucketName, "a.txt");

        // 下载
        response.addHeader("Content-Disposition","attachment;filename=a.txt");
        ServletOutputStream os = response.getOutputStream();
        fileStoreService.writeTo(bucketName, "a.txt", os);
    }
}

相关文章:
MinIO Quickstart Guide
MinIO spring boot starter 1.1.0 发布
MinIO很强-让我放弃FastDFS拥抱MinIO的8个理由
通过Minio搭建私有化对象存储服务_开源PaaS Rainbond最佳实践


Corwien
6.3k 声望1.6k 粉丝

为者常成,行者常至。