Springboot与minio

news2025/2/23 18:51:23

一、介绍

        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.coloradmin.cn/o/2146405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

遭华尔街大幅看好,收入高速增长但面临困境,Zillow股票还能买入吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经的核心观点&#xff1a; &#xff08;1&#xff09;Wedbush已经将Zillow的评级上调为“跑赢大盘”&#xff0c;目标价为80美元。 &#xff08;2&#xff09;第二季度业绩强劲&#xff0c;收入继续保持着两位数增长…

esp32-C2 对接火山引擎实现语音转文本(二)

目录 一、 语音转文本初始化 二、 WedStream 事件处理函数 一、 语音转文本初始化 Volcengine_vtt_handle_t Volcengine_Vtt_Init(Volcengine_vtt_config_t *config) {// 管道配置audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG();Volcengine_vtt_t *vt…

架构师:在 Spring Cloud 中实现全局异常处理的技术指南

1、简述 在分布式系统中,微服务架构是最流行的设计模式之一。Spring Cloud 提供了各种工具和库来简化微服务的开发和管理。然而,随着服务的增多,处理每个服务中的异常变得尤为复杂。因此,实现统一的全局异常处理成为了关键。本篇博客将介绍如何在 Spring Cloud 微服务架构…

DevExpress中文教程:如何将WinForms数据网格连接到ASP. NET Core WebAPI服务?

日前DevExpress官方发布了DevExpress WinForms的后续版本——将.NET桌面客户端连接到安全后端Web API服务(EF Core with OData)&#xff0c;在本文中我们将进一步演示如何使用一个更简单的服务来设置DevExpress WinForms数据网格。 P.S&#xff1a;DevExpress WinForms拥有180…

关于github GPG的配置

GitHub 使用 OpenPGP 库来确认本地签名的提交和标记&#xff0c;是否根据你在 GitHub.com 上添加到帐户的公钥进行加密验证。 这里是github关于GPG密钥的文档&#xff1a;https://docs.github.com/zh/authentication/managing-commit-signature-verification/about-commit-sig…

开放式耳机和骨传导耳机哪个好用?全面解析哪个品牌的开放式蓝牙耳机质量好

当谈到开放式耳机与骨传导耳机之间的选择时&#xff0c;两种类型的耳机各有千秋&#xff0c;适合不同的使用场景和个人偏好。 开放式耳机的设计让耳朵可以自由呼吸&#xff0c;同时让部分环境音进入&#xff0c;这样用户可以在享受音乐的同时保持对外界的感知&#xff0c;非常…

求Huffman树及其matlab程序详解

#################本文为学习《图论算法及其MATLAB实现》的学习笔记################# 算法用途 求Haffman树 算法思想 根据定理4.17,给出求Huffman树的算法步骤如下: ①对给出的所要求的叶子顶点的权进行从小到大排序,写出的权重向量 ; ②根据定理4.17,写出兄弟的权重分别为…

9月19日微语报,星期四,农历八月十七

9月19日微语报&#xff0c;星期四&#xff0c;农历八月十七&#xff0c;工作愉快&#xff0c;生活喜乐&#xff01; 一份微语报&#xff0c;众览天下事&#xff01; 1、台风“普拉桑”将影响东海&#xff0c;自然资源部启动海洋灾害三级应急响应。 2、国家体育总局&#xff…

Spring6梳理9—— 依赖注入之注入对象类型属性

9.1 依赖注入之外部注入对象类型属性 9.1.1 创建dept与emp类 1.dept类 package com.atguigu.spring6.iocxml.ditest;//部门类 public class Dept {private String dname;public String getDname() {return dname;}public void setDname(String dname) {this.dname dname;…

强化雨天巡检,智能巡检机器人确保变电站安全运行

中央气象台9月19日6时继续发布暴雨黄色预警&#xff1a;预计&#xff0c;9月19日8时至20日8时&#xff0c;内蒙古中部、河北北部、安徽东南部、江苏南部、上海、浙江大部、海南岛以及青海东北部、甘肃西南部、辽宁中部、福建西北部、江西中部等地部分地区有大到暴雨&#xff0c…

Linux系统编程入门 | 模拟实现 ls -l 命令

模拟实现代码 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <pwd.h> #include <grp.h> #include <time.h> #include <string.h>int main(int argc, char* argv[]) {if (a…

Sidewalk介绍

目录 1 前言2 简介2.1 注意事项 3 结束语 1 前言 Sidewalk是Amazon出的一个针对IoT物联网的协议&#xff0c;类似于LoRaWAN协议&#xff0c;针对小而美的低功耗设备。Amazon Sidewalk支持低带宽和远程连接&#xff0c;使用BLE进行短距离通信&#xff0c;使用900MHz的频率的LoR…

Selenium实现滑动滑块验证码验证!

背景&#xff1a;在部分的登录中有滑动验证码的验证&#xff0c;由于滑动验证码的缺块是随机的就导致实现起来比较困难&#xff01; 01、实现方案 模板匹配 通过openCV分析两个图片的相似度&#xff0c;获取两个相似度很高图片的坐标&#xff0c;从而计算两个图片的距离。 轮…

(k8s)Kubernetes部署Promehteus

转载&#xff1a;Kubernetes&#xff08;k8s&#xff09;部署Promehteus 一、概述 在1.8版本以后heapster由metrics-server替代&#xff1b;从k8s的v1.11版本开始已经全面转向以Prometheus为核心的新监控体系架构&#xff1b;kube-prometheus 中包含了 prometheus 监控所用到的…

Sui Builder House锦集,原生USDC和CCTP即将登陆Sui

在9月17日新加坡Sui Builder House活动上&#xff0c;我们度过了充满知识分享和社区建设的精彩一天&#xff01;感谢数百位参会的开发者&#xff0c;一同庆祝Sui社区&#xff0c;并了解最新的动态&#xff01; 在过去的24小时内&#xff0c;发布了以下重要消息&#xff0c;不容…

C语言 | Leetcode C语言题解之第416题分割等和子集

题目&#xff1a; 题解&#xff1a; bool canPartition(int* nums, int numsSize) {if (numsSize < 2) {return false;}int sum 0, maxNum 0;for (int i 0; i < numsSize; i) {sum nums[i];maxNum fmax(maxNum, nums[i]);}if (sum & 1) {return false;}int tar…

网络封装分用

目录 1,交换机 2,IP 3,接口号 4,协议 分层协议的好处: 5,OSI七层网络模型. 6,TCP/IP五层网络模型(主流): [站在发送方视角] [接收方视角] 1,交换机 交换机和IP没有关系,相当于是对路由器接口的扩充,这时相当于主机都与路由器相连处于局域网中,把越来越多的路由器连接起…

月入10000+,蓝海项目!少儿英语赛道

一、项目原理 少儿英语赛道的话&#xff0c;我们主要通过英语小短文&#xff0c;来让孩子学习英语&#xff0c;虽然现在有很多英语的课程&#xff0c;但针对少儿的英语是比较少的&#xff0c;所以这个赛道还是很吃香的。 整体流程也简单&#xff0c;先用AI写出故事&#xff0…

axure的下载,激活,汉化全过程,多图

1.前言 下载地址&#xff1a;https://pan.baidu.com/s/12xo1mJer2hmBK7QrYM5v-Q?pwd0107#list/path%2Fcsdn%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6 源文章&#xff1a;https://blog.csdn.net/iwanttostudyc/article/details/123773796?ops_request_misc%257B%2522request%25…

基于SpringBoot+Vue的篮球馆会员信息管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…