Minio基本使用(Java)

Posted 码灵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Minio基本使用(Java)相关的知识,希望对你有一定的参考价值。

1 Minio简介

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

官方地址https://min.io/

1.1 支持非结构化的数据存储

1.2 分布式部署

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。

在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。

Notes:分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

2 使用docker安装并启动Minio服务

2.1 docker安装minio

可以使用:docker search minio查看docker仓库中的各个版本,可选择装指定版本

docker pull minio/minio

docker run -p 9000:9000 minio/minio server /data

安装后使用浏览器访问http://127.0.0.1:9000,如果可以访问,则表示minio已经安装成功。登录名和密码默认:minioadmin

创建bucket test,在springboot中会使用。

2.2 其他安装方式

可参考https://docs.min.io/docs/minio-quickstart-guide.html

3 Springboot 中操作minio

3.1 添加操作依赖

<dependency>

  <groupId>com.jlefebure</groupId>

  <artifactId>spring-boot-starter-minio</artifactId>

  <version>1.1</version>

</dependency>

3.2 配置全局参数

# Minio Host
spring.minio.url=http://10.21.80.17:9000/
# Minio Bucket name for your application
spring.minio.bucket=test
# Minio access key (login)
spring.minio.access-key=minioadmin
# Minio secret key (password)
spring.minio.secret-key=minioadmin


## MULTIPART (MultipartProperties)
# Enable multipart uploads
spring.servlet.multipart.enabled=true
# Threshold after which files are written to disk.
spring.servlet.multipart.file-size-threshold=2KB
# Max file size.
spring.servlet.multipart.max-file-size=500MB
# Max Request Size
spring.servlet.multipart.max-request-size=1024MB

3.3 测试案例:



import com.jlefebure.spring.boot.minio.MinioConfigurationProperties;

import com.jlefebure.spring.boot.minio.MinioException;

import com.jlefebure.spring.boot.minio.Minioservice;

import io.minio.messages.Item;

import org.apache.tomcat.util.http.fileupload.IOUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.io.InputStreamResource;

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

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.InputStream;

import java.net.URLConnection;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.util.List;



@RestController

public class MinioController 

    @Autowired

    private MinioService minioService;

    @Autowired

    private MinioConfigurationProperties configurationProperties;

    @GetMapping("/files")

    public List<Item> testMinio() throws MinioException 

        return minioService.list();

    

    @GetMapping("files/object")

    public void getObject(@PathVariable("object") String object, HttpServletResponse response) throws com.jlefebure.spring.boot.minio.MinioException, IOException 

        InputStream inputStream = minioService.get(Paths.get(object));

        InputStreamResource inputStreamResource = new InputStreamResource(inputStream);

        // Set the content type and attachment header.

        response.addHeader("Content-disposition", "attachment;filename=" + object);

        response.setContentType(URLConnection.guessContentTypeFromName(object));

        // Copy the stream to the response's output stream.

        IOUtils.copy(inputStream, response.getOutputStream());

        response.flushBuffer();

    

    @PostMapping
    public void addAttachement(@RequestParam("file") MultipartFile file) throws IOException 
        System.out.println(file);
        String filename = file.getOriginalFilename();
    
       
        Path path = Paths.get("/png/"+filename);
        String url = configurationProperties.getUrl() + "/" + configurationProperties.getBucket() + path.toAbsolutePath();
         
        System.out.println(url);

        try 

            minioService.upload(path, file.getInputStream(), file.getContentType());

         catch (MinioException e) 

            throw new IllegalStateException("The file cannot be upload on the internal storage. Please retry later", e);

         catch (IOException e) 

            throw new IllegalStateException("The file cannot be read", e);

        

    

minio简单安装与使用

最近使用公司自己研发的框架,了解到一种文件上传服务器-minio。

minio简介

MinIO is High Performance Object Storage released under Apache License v2.0. It is API compatible with Amazon S3 cloud storage service. Using MinIO build high performance infrastructure for machine learning, analytics and application data workloads.

MinIO高性能对象存储是Apache许可下发布版本。它与Amazon S3 API兼容的云存储服务。使用MinIO构建高性能的基础设施为机器学习、分析和应用程序数据的工作量。

minio安装

官网地址:https://docs.min.io/

我们本次使用docker镜像安装

命令


docker pull minio/minio:edge
docker run -p 9000:9000 minio/minio:edge server /data

启动后日志
技术图片

注意图中隐藏部分是默认的key和secret,需要我们自己修改默认账号。
登录访问:
http://127.0.0.1:9000
技术图片
技术图片

支持minio文件管理服务我们就安装好了,是不是很简单呢。

通过java连接minio,使用minio客户端来上传文件

java手册文档:https://docs.min.io/docs/java-client-quickstart-guide

首先创建一个bucket

技术图片

然后对改2020桶进行配置,可读可写
技术图片
技术图片

引入依赖, 版本看自己需要

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

本人用的阿里云仓库下载的6.0.10jar包
地址:http://archiva-maven-storage-prod.oss-cn-beijing.aliyuncs.com/repository/central/io/minio/minio/6.0.10/minio-6.0.10.jar?Expires=1581841941&OSSAccessKeyId=LTAIfU51SusnnfCC&Signature=JxVcwM%2BIIOC30mFq2gUXEklwIcw%3D

java 通过minio上传文件示例

MinioClient minioClient = new MinioClient("http://localhost", 9000,
        "key",
        "secret");
minioClient.putObject("2020","TEST.rtf", "/TEST.rtf");

登录minio网页,查看文件是否已上传,如下图。
技术图片

后言

minio的使用方法很多,大家自己查看官方文档,这里只是做了简要介绍与使用,一起学习。。。

以上是关于Minio基本使用(Java)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot + minio 实现高性能存储服务,So Easy~!

Spring Boot 整合 Minio 实现文件上传

minio单机集群搭建Spring Boot集成,详细步骤

minio 介绍

spring-boo hello world程序

docker搭建minio以及java sdk使用