minio的下载和springboot整合minio使用方法

 更新时间:2024年09月20日 11:04:15   作者:java炒饭小能手  
本文介绍了如何通过Docker拉取MinIO镜像,并创建MinIO容器的过程,首先,需要在本地创建/data和/conf两个目录用于挂载MinIO的数据和配置文件,接下来,通过docker run命令启动容器,设置MinIO的访问端口、用户名、密码等信息,感兴趣的朋友一起看看吧

下载minio

基于docker拉取minio镜像

docker pull minio/minio

 创建minio容器

先创建/root/minio/data 和 /root/minio/conf
docker run -d -p 9000:9000 -p 9001:9001 --name minio \
-e "MINIO_ROOT_USER=htsdg" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /root/minio/data:/data \     
-v /root/minio/conf:/root/.minio \
minio/minio server  --console-address ":9001" /data 

 解释:

9000为映射端口,9001为控制台访问的端口(端口号可以随意设置),控制台访问路径:

http://服务器ip地址:9001/login

 接下来就是用户和密码,如何就是minio的数据和配置文件所挂载的目录(可以自己设置成/../....../data 和 /../....../conf)

 具体使用

导入需要的依赖

        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

 在yml文件中配置:

minio:
  endpoint: http://********:9000 #Minio服务所在地址
  accessKey: htsdg                #连接Minio用户名
  secretKey: 12345678               #连接Minio密码
  bucketName: bt01              #Minio数据桶名称

创建好文件和类。

MinIoConfig类:

package com.htsdg.Properties;
import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIoConfig {
    /**
     * 访问用户
     */
    @Value("${minio.accessKey}")
    private String accessKey;
    /**
     * 密钥
     */
    @Value("${minio.secretKey}")
    private String secretKey;
    /**
     * 访问api Url
     */
    @Value("${minio.endpoint}")
    private String endpoint;
    /**
     * 桶名称
     */
    @Value("${minio.bucketName}")
    private String bucketName;
    /**
     * 创建MinIo客户端
     *
     * @return
     */
    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }
}

MinIOUtil类:

这里我就使用了一个bucket,你需要先去控制台创建一个bucket,我这里创建的是bt01。我的上传之后的文件路径是 xycj/原文件名

package com.htsdg.utils;
import io.minio.GetObjectArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@Component
public class MinIOUtil {
    @Autowired
    private MinioClient minioClient;
    /**
     *  桶名称
     */
    @Value("${minio.bucketName}")
    private String bucketName;
    /**
     * putObject上传文件
     *
     * @param file 文件
     * @return filePath
     */
    public String putObject(MultipartFile file) throws IOException, ServerException, InsufficientDataException, InternalException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, XmlParserException, ErrorResponseException {
        //文件名
        String originalFilename = file.getOriginalFilename();
        //文件流
        InputStream inputStream = file.getInputStream();
        //文件大小
        long size = file.getSize();
        //文件路径
        String filePath = createFilePath(originalFilename);
        System.out.println(filePath+"\t文件路径");
        //存储方法 putObject
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(bucketName)
                .object(filePath)
                .stream(inputStream, size, -1)
                .contentType(file.getContentType())
                .build());
        return filePath;
    }
    /**
     * 下载文件
     *
     * @param filePath 文件路径
     */
    public void getObject(HttpServletResponse httpServletResponse, String filePath) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
        String fileName = getFileName(filePath);
        InputStream inputStream = minioClient.getObject(GetObjectArgs.builder()
                .bucket(bucketName)
                .object(filePath)
                .build());
        downloadFile(httpServletResponse, inputStream, fileName);
    }
    /**
     * 获取文件路径
     *
     * @param originalFilename 原始文件名称
     * @return FilePath
     */
    public String createFilePath(String originalFilename) {
        return "xycj/" + originalFilename;
    }
    /**
     * 根据文件路径获取文件名称
     *
     * @param filePath 文件路径
     * @return 文件名
     */
    public String getFileName(String filePath) {
        String[] split = StringUtils.split(filePath, "/");
        return split[split.length - 1];
    }
    /**
     * 下载文件
     *
     * @param httpServletResponse httpServletResponse
     * @param inputStream         inputStream
     * @param fileName            文件名
     * @throws IOException IOException
     */
    public void downloadFile(HttpServletResponse httpServletResponse, InputStream inputStream, String fileName) throws IOException {
        //设置响应头信息,告诉前端浏览器下载文件
        httpServletResponse.setContentType("application/octet-stream;charset=UTF-8");
        httpServletResponse.setCharacterEncoding("UTF-8");
        httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //获取输出流进行写入数据
        OutputStream outputStream = httpServletResponse.getOutputStream();
        // 将输入流复制到输出流
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        // 关闭流资源
        inputStream.close();
        outputStream.close();
    }
}

controller层:

这里就演示个上传吧。

package com.htsdg.controller;
import com.htsdg.utils.MinIOUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class MinioController {
    @Autowired
    private MinIOUtil minIOUtil;
    /**
     * 通用上传请求
     */
    @PostMapping("/upload")
    public void uploadFile(MultipartFile file) throws Exception {
        minIOUtil.putObject(file);
        System.out.println("yes");
    }
    @GetMapping("/download")
    public void download(HttpServletResponse response, @RequestParam(value = "filepath") String filepath) throws IOException {
        try {
            minIOUtil.getObject(response, filepath);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            System.out.println("出错了!!!!!");
        }
    }
}

到此这篇关于minio的下载和springboot整合minio使用方法的文章就介绍到这了,更多相关springboot整合minio使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot微服务打包Docker镜像流程解析

    Springboot微服务打包Docker镜像流程解析

    这篇文章主要介绍了Springboot微服务打包Docker镜像流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Spring扩展之基于HandlerMapping实现接口灰度发布实例

    Spring扩展之基于HandlerMapping实现接口灰度发布实例

    这篇文章主要介绍了Spring扩展之基于HandlerMapping实现接口灰度发布实例,灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,需要的朋友可以参考下
    2023-08-08
  • Java设计模式之工厂方法模式实例简析

    Java设计模式之工厂方法模式实例简析

    这篇文章主要介绍了Java设计模式之工厂方法模式,较为详细的分析了Java工厂模式的功能、定义并给出了实例代码加以总结分析,需要的朋友可以参考下
    2015-11-11
  • idea修改maven模块名称还显示老名称问题解决

    idea修改maven模块名称还显示老名称问题解决

    本文主要介绍了idea修改maven模块名称还显示老名称问题解决,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • Java 动态模拟操作系统进程调度算法

    Java 动态模拟操作系统进程调度算法

    这篇文章主要介绍了采用java语言编程模拟N个进程采用动态高优先权优先进程调度算法。文中代码具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2021-12-12
  • Servlet Filter过滤器执行顺序

    Servlet Filter过滤器执行顺序

    这篇文章主要介绍了Servlet Filter过滤器执行顺序的相关资料,帮助大家更好的理解为什么要用过滤器,感兴趣的朋友可以了解下
    2020-12-12
  • Java求出任意数字的各个位数之和方式

    Java求出任意数字的各个位数之和方式

    这篇文章主要介绍了Java求出任意数字的各个位数之和方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 浅谈Arrays.asList() 和ArrayList类型区别

    浅谈Arrays.asList() 和ArrayList类型区别

    下面小编就为大家带来一篇Arrays.asList() 和ArrayList类型区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java中调用Python的实现示例

    Java中调用Python的实现示例

    本文主要介绍了Java中调用Python的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 深入学习java枚举的应用

    深入学习java枚举的应用

    本篇是关于java深入提高学习的相关知识,介绍了枚举的应用等方面内容,有兴趣的朋友参考学习下吧。
    2018-01-01

最新评论