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

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(桶)

        设置名字,点击创建。

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.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.*;
import org.junit.jupiter.api.Test;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*/@Testpublic 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("文件上传成功");} 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.mrgr.cn/news/29736.html

相关文章:

  • Mybatis Plus 集成 PgSQL 指南
  • 通俗易懂的正则表达式
  • rust高级特征
  • 排序算法 -插入排序
  • 一文读懂!为什么大公司都在用仓库管理系统?
  • 明源地产ERP系统 WFWebService 反序列化漏洞复现
  • 机器学习中求解模型参数的方法
  • Pytest使用fixture实现token共享
  • 驱动开发知识点
  • 在 Linux 系统中目录架构说明
  • 记录工作中遇到的问题(持续更新~)
  • Kubernetes Ingress
  • C++面试3
  • 根据 IP 地址进行 VPN 分流(详细,亲测,通用)
  • 深度学习 之 常见损失函数简介:名称、作用及用法
  • vue 2表格滚动加载
  • 【VUE】快速上手
  • 心觉:不能成事的根本原因
  • 龙海家园的免费停车点探寻
  • 【C语言】带你手把手拿捏指针(3)(含转移表)
  • 中、美、德、日制造业理念差异
  • Linux常见查看文件命令
  • 数学学习记录
  • vue获取最近7天时间;获取任意时间段时间
  • Flutter 优化技巧分享
  • 基于python+django+vue的医院预约挂号系统