Java中Minio的基本使用详解

 更新时间:2024年01月23日 09:43:40   作者:码灵  
这篇文章主要介绍了Java中Minio的基本使用详解,MinIO 是一个基于Apache License v2.0开源协议的对象存储服务,它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,需要的朋友可以参考下

1 Minio简介

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。

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

官方地址

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

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

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

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);
        }
    }
}

到此这篇关于Java中Minio的基本使用详解的文章就介绍到这了,更多相关Minio的基本使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合Thymeleaf的方法

    SpringBoot整合Thymeleaf的方法

    这篇文章主要介绍了SpringBoot整合Thymeleaf的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 教你怎么用java一键自动生成数据库文档

    教你怎么用java一键自动生成数据库文档

    最近小编也在找这样的插件,就是不想写文档了,浪费时间和心情啊,果然我找到一款比较好用,操作简单不复杂.screw 是一个简洁好用的数据库表结构文档的生成工具,支持 MySQL、Oracle、PostgreSQL 等主流的关系数据库.需要的朋友可以参考下
    2021-05-05
  • Spring Boot 约定大于配置之如何实现自定义配置

    Spring Boot 约定大于配置之如何实现自定义配置

    本文介绍了SpringBoot的“约定大于配置”理念以及如何实现自定义配置,通过实现接口和添加@Configuration注解,开发者可以灵活地扩展和定制SpringBoot的默认行为,感兴趣的朋友一起看看吧
    2025-03-03
  • Java import static及import原理区别解析

    Java import static及import原理区别解析

    这篇文章主要介绍了Java import static及import原理区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Spring配置数据源的三种方式(小结)

    Spring配置数据源的三种方式(小结)

    本文主要介绍了Spring配置数据源的三种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • spring security 自定义Provider 如何实现多种认证

    spring security 自定义Provider 如何实现多种认证

    这篇文章主要介绍了spring security 自定义Provider实现多种认证方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java IO流深入理解

    Java IO流深入理解

    这篇文章主要介绍了java IO流的深入理解,下面和小编来一起学习一下吧,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容
    2021-07-07
  • 详细易懂带你了解Spring中的注解

    详细易懂带你了解Spring中的注解

    这篇文章主要介绍了详细易懂带你了解Spring中的注解,Spring的一个核心是IOC,是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式,需要的朋友可以参考下
    2023-08-08
  • IDEA Error:java: 无效的源发行版: 17错误

    IDEA Error:java: 无效的源发行版: 17错误

    本文主要介绍了IDEA Error:java: 无效的源发行版: 17错误,这个错误是因为您的IDEA编译器不支持Java 17版本,您需要更新您的IDEA编译器或者将您的Java版本降级到IDEA支持的版本,本文就来详细的介绍一下
    2023-08-08
  • SpringBoot集成Kafka的实现示例

    SpringBoot集成Kafka的实现示例

    本文主要介绍了SpringBoot集成Kafka的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01

最新评论