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的基本使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java面向对象之内部类案例讲解

    Java面向对象之内部类案例讲解

    这篇文章主要介绍了Java面向对象之内部类案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • SpringBoot手动开启事务:DataSourceTransactionManager问题

    SpringBoot手动开启事务:DataSourceTransactionManager问题

    这篇文章主要介绍了SpringBoot手动开启事务:DataSourceTransactionManager问题,具有很好的价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Mybatis实体类属性与数据库不一致解决方案

    Mybatis实体类属性与数据库不一致解决方案

    这篇文章主要介绍了Mybatis实体类属性与数据库不一致解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • SpringBoot使用MyBatis时的几种传参规范示例

    SpringBoot使用MyBatis时的几种传参规范示例

    使用Mybatis作为持久层框架时,对于数据库的增删改查等操作都需要参数的传递,本文就详细的介绍了一下SpringBoot使用MyBatis时的几种传参规范示例,感兴趣的可以了解一下
    2022-02-02
  • Mybatis中的@Param及动态SQL详解

    Mybatis中的@Param及动态SQL详解

    这篇文章主要介绍了Mybatis中的@Param及动态SQL详解,@Param是MyBatis所提供的作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,需要的朋友可以参考下
    2023-10-10
  • Java中HashMap的初始容量设置方式

    Java中HashMap的初始容量设置方式

    这篇文章主要介绍了Java中HashMap的初始容量设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 优化常见的java排序算法

    优化常见的java排序算法

    这篇文章主要介绍了Java编程中快速排序算法的实现及相关算法优化,快速排序算法的最差时间复杂度为(n^2),最优时间复杂度为(n\log n),存在优化的空间,需要的朋友可以参考下
    2021-07-07
  • java编程多线程并发处理实例解析

    java编程多线程并发处理实例解析

    这篇文章主要介绍了java编程多线程并发处理实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 基于Java 数组内存分配的相关问题

    基于Java 数组内存分配的相关问题

    本篇文章是对Java中数组内存分配进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Spring boot热部署devtools过程解析

    Spring boot热部署devtools过程解析

    这篇文章主要介绍了Spring boot热部署devtools过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论