当前位置: 首页 > article >正文

Springboot与minio

一、介绍

        Minio是一个简单易用的云存储服务,它让你可以轻松地把文件上传到互联网上,这样无论你在哪里,只要有网络,就能访问或分享这些文件。如果你想要从这个仓库里取出一张图片或一段视频,让网站的访客能看到或者下载,Minio和网站之间就需要配合完成几个步骤:

  1. 上传文件:首先,你通过Minio提供的接口或者工具,把视频或图片上传到Minio的服务器上。上传时,你可以设置一些额外的信息,告诉Minio这些文件是可以被公开访问的。
  2. 生成链接:当你要在网站上展示这些文件时,Minio能生成一个特殊的网址(我们叫做对象URL)。这个链接直接指向存储在Minio中的视频或图片。关键在于,这个链接可以设置一个有效期,过了时间就失效,保证安全性。
  3. 前端显示:网站的前端代码(就是浏览器能看到的部分)会用这个链接去请求Minio服务器上的视频或图片。当浏览器收到这些文件时,如果它们是图片,就会直接显示在页面上;如果是视频,则会在页面上嵌入一个播放器让用户观看。
  4. 下载功能:对于下载来说,其实也很简单。因为前端已经有了这个文件的直接链接,用户点击“下载”按钮时,浏览器就会使用这个链接开始下载文件到用户的电脑上,就像平时在网上下载东西一样。

二、部署minio

1、拉取最新的minio镜像

        使用docker pull minio/minio命令,下载镜像。

2、创建目录

        一个用来存放配置,一个用来存储上传文件的目录。启动前需要先创建Minio外部挂载的配置文件( /home/minio/config),和存储上传文件的目录( /home/minio/data)。

3、运行minio容器

docker run -p 9000:9000 -p 9090:9090 \
     --net=host \
     --name minio \
     -d --restart=always \
     -e "MINIO_ACCESS_KEY=minioadmin" \
     -e "MINIO_SECRET_KEY=minioadmin" \
     -v /home/minio/data:/data \
     -v /home/minio/config:/root/.minio \
     minio/minio server \
     /data --console-address ":9090" -address ":9000"

  • 9090端口指的是minio的客户端端口
  • MINIO_ACCESS_KEY :账号
  • MINIO_SECRET_KEY :密码(账号长度必须大于等于5,密码长度必须大于等于8位)

4、访问minio

        在浏览器输入:服务器地址:9090/login,进入登录界面。输入启动命令中设置的账号密码,进入系统。

三、minio系统操作

1、创建用户

       设置账号密码,勾选所有策略。

2、创建组

        设置组名,并向该组中添加用户。

3、创建accessKey和secretKey 

        直接点击创建即可。

        出现弹窗,点击下载。

        文件内容如下所示,保存文件,SDK操作文件的API需要用到:

{"url":"http://192.168.197.131:9090/api/v1/service-account-credentials","accessKey":"S2I6E378jrzSLTY0X0WY","secretKey":"vOGE87WIe3ilh4Ff2CUEzKuUskiZXctubjYkwcnC","api":"s3v4","path":"auto"}

4、创建Bucket(桶)

        设置名字,点击创建。

        点击进入桶的设置界面,当把桶的访问策略设置为public时,桶中的文件可以通过{服务器地址:minio服务端口号}/{bucketName}/文件名的方式访问。

5、上传文件

       选择要上传到的bucket。

        点击upload上传。

四、springboot项目中使用minio

1、添加依赖

        minio包中自带的okhttp3会报错。需要排除依赖后重新引入。

<dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.12.0</version>
        </dependency>

        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.5.12</version>
            <exclusions>
                <exclusion>
                    <artifactId>okhttp</artifactId>
                    <groupId>com.squareup.okhttp3</groupId>
                </exclusion>
            </exclusions>
        </dependency>

2、编写测试代码

package com.zkdj.applet.common;

import io.minio.*;
import io.minio.errors.*;
import org.junit.jupiter.api.Test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * 类描述 -> minio测试类
 *
 * @Author: ywz
 * @Date: 2024/09/18
 */
public class MinioTest {


    /**
     * 方法描述 -> 测试MinIO上传功能
     * 该方法用于验证MinIO客户端的连接,并尝试向指定的存储桶上传文件。如果存储桶不存在,则创建它。
     * 使用了MinioClient来构建与MinIO服务器的连接,并执行相应的操作。
     *
     * @Author: ywz
     * @Date: 2024/09/18
     */
    @Test
    public void minioTest() {
        try {
            // 初始化MinioClient,设置服务器端点和访问凭证
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint("http://192.168.197.131:9000")
                            .credentials("S2I6E378jrzSLTY0X0WY",
                                    "vOGE87WIe3ilh4Ff2CUEzKuUskiZXctubjYkwcnC")
                            .build();

            // 检查指定的存储桶是否存在
            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("public").build());
            // 如果存储桶不存在,则创建它
            if (!found) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket("public").build());
            }

            // 向存储桶上传文件

            minioClient.uploadObject(
                    UploadObjectArgs.builder()
                            .bucket("public")
                            .object("原神 2024_8_31 22_34_51.png")
                            .filename("C:\\Users\\86176\\Videos\\Captures\\原神 2024_8_31 22_34_51.png")
                            .build());
            // 输出上传成功的提示信息
            System.out.println("文件上传成功");
            GetObjectArgs getObjectArgs = GetObjectArgs.builder().bucket("public").object("原神 2024_8_31 22_34_51.png").build();
            // 获取文件信息,包含了桶、对象名、请求头等信息。
            GetObjectResponse object = minioClient.getObject(getObjectArgs);
            BufferedInputStream bis = new BufferedInputStream(object);
            // 将文件写入到本地文件系统
            FileOutputStream fos = new FileOutputStream("D:\\原神图片.png");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            int i = 0;
            while ((i = bis.read()) != -1) {
                bos.write(i);
            }
            bos.flush();
            bis.close();
            bos.close();
        } catch (MinioException e) {
            // 处理MinIO异常
            System.out.println("发生错误: " + e);
            System.out.println("HTTP跟踪: " + e.httpTrace());
        } catch (IOException | NoSuchAlgorithmException | InvalidKeyException e) {
            // 处理其他潜在异常
            throw new RuntimeException(e);
        }
    }
}

3、运行后查看


http://www.kler.cn/news/314821.html

相关文章:

  • 【百日算法计划】:每日一题,见证成长(016)
  • [数据集][目标检测]文本表格检测数据集VOC+YOLO格式6688张5类别
  • 华为HarmonyOS地图服务 3 - 如何开启和展示“我的位置”?
  • 掌控历史:如何通过Git版本管理工具提升你的开发效率
  • 【记录一下VMware上开虚拟端口映射到公网】
  • 华为云centos7.9按装ambari 2.7.5 hostname 踩坑记录
  • SpringBoot中基于Mybatis-Plus多表联查(无xml,通过注解实现)
  • 车载软件调试工具系列---Trace32简介UI界面简介
  • C#基础(16)实践:学生成绩管理系统
  • 1.随机事件与概率
  • TCP: Textual-based Class-aware Prompt tuning for Visual-Language Model
  • 【学习笔记】STM32F407探索者HAL库开发(四)F103时钟系统配置
  • 等保测评与网络安全等级划分
  • 【网络通信基础与实践第三讲】传输层协议概述包括UDP协议和TCP协议
  • linux 基础(一)mkdir、ls、vi、ifconfig
  • 汽车EDI:MöllerTech EDI项目案例
  • 实战讲稿:Spring Boot整合MyBatis
  • 前端入门:HTML+CSS简便开发的技巧
  • 美国火箭实验室Rocket Lab USA(RKLB)
  • Tomcat窗口运行修改窗口标题显示项目日期时间
  • 【开源免费】基于SpringBoot+Vue.JS教师工作量管理系统(JAVA毕业设计)
  • 【微服务】Eureka的自我保护机制
  • (学习记录)使用 STM32CubeMX——配置时钟(入门)
  • 基于Windows系统以tomcat为案例,讲解如何新增自启动服务,定时重启服务。
  • mybatis 和 mybatis-plus
  • mysql批量修改表前缀
  • 【java实现json转化为CSV文件】
  • 【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现
  • Kotlin 极简小抄 P3(函数、函数赋值给变量)
  • LeetCode 第416场周赛个人题解