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*/@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("文件上传成功");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.rhkb.cn/news/429549.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象程序设计——set容器の简析

1.set的介绍 • 序列式容器和关联式容器 • 我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间⼀般没有紧…

Qt --- 常用控件的介绍 --- 其他控件

一、QPushButton QWidget中设计到的各种属性/函数/使用方法&#xff0c;针对接下来要介绍的Qt的各种控件都是有效的。 使用QPushButton表示一个按钮&#xff0c;这也是当前我们最熟悉的一个控件了。这个类继承了QAbstractButton&#xff0c;这个类是一个抽象类&#xff0c;是…

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 目录 Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 一、简单介绍 二、单例模式 (Singleton Pattern) 1、什么时候使用单例模式 2、单例模式的好处 3、使用单例模式的…

【后端开发】JavaEE初阶—Theard类及常见方法—线程的操作(超详解)

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解多线程的知识哟~~~&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【后端开发】JavaEE初阶—线程的理解和编程实现-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondl…

WIFI路由器的套杆天线简谈

❝本次推文简单介绍下WIFI路由器的套杆天线。 路由器天线 路由器在这个万物互联的时代&#xff0c;想必大家对其都不陌生。随着科技的发展&#xff0c;常用的路由器上的天线也越来越多&#xff0c;那么问题来了&#xff1a;天线越多&#xff0c;信号越好吗&#xff1f;路由器…

ChromaDB教程_2024最新版(上)

前言 在上一篇&#xff08;快捷入口&#xff09;文章中&#xff0c;博主提到了一个向量存储&#xff0c;其中用到了Chroma数据库。代码示例如下&#xff1a; vectordb Chroma.from_documents(documentsdocs,embeddingembedding,persist_directoryvector_dir )这是基于langc…

服务发现和代理实例的自动更新

☞ 返回总目录 1.服务发现的两种方式 StartFindService 方法 这是一个在后台启动的连续 “FindService” 活动&#xff0c;当服务实例的可用性发生变化时&#xff0c;会通过回调通知调用者。 它返回一个FindServiceHandle&#xff0c;可通过调用StopFindService来停止正在进行…

自动化立体仓库与堆垛机单元的技术参数

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载。 这份文件是一份自动化立体仓库与堆垛机单…

初识APC机制实现APC注入

参考&#xff1a;APC异步过程调用-CSDN博客 又是跟着红队蓝军师傅学免杀的一天&#xff0c;这节课介绍了APC机制和APC注入的实现。 APC介绍&#xff1a; APC&#xff0c;全称为Asynchronous Procedure Call&#xff0c;即异步过程调用&#xff0c;是指函数在特定线程中被异…

【HTTPS】对称加密和非对称加密

HTTPS 是什么 HTTPS 是在 HTTP 的基础上&#xff0c;引入了一个加密层&#xff08;SSL&#xff09;。HTTP 是明文传输的&#xff08;不安全&#xff09; 当下所见到的大部分网站都是 HTTPS 的&#xff0c;这都是拜“运营商劫持”所赐 运营商劫持 下载⼀个“天天动听“&…

Java ETL - Apache Beam 简介

基本介绍 Apache Beam是一个用于大数据处理的开源统一编程模型。它允许用户编写一次代码&#xff0c;然后在多个批处理和流处理引擎上运行&#xff0c;如Apache Flink、Apache Spark和Google Cloud Dataflow等。Apache Beam提供了一种简单且高效的方式来实现数据处理管道&…

【Node.js】初识微服务

概述 Node.js 的微服务架构是一种通过将应用程序分解为独立的、松耦合的小服务的方式进行系统设计。 每个微服务负责处理一个特定的业务功能&#xff0c;并且这些服务可以独立开发、部署、扩展和管理&#xff0c;并且可以通讯。 它的核心思想就是解耦。 微服务和微前端是类…

智慧校园建设解决方案建设系统简介

一、建设背景 1.1 政策背景 1.2 班牌的演变 1.3 建设愿景 二、 智慧班牌简介 三、智慧班牌系统 3.1 系统概述 3.2 软件平台功能交互简介 3.2.1 智慧班牌与管理平台间的功能关联 3.2.2 手机客户端&#xff08;管理员、教师、家长端&#xff09; 3.2.3 手机客户端&#x…

CleanClip --- 为Mac用户打造的智能剪贴板管理利器

CleanClip是一款专为Mac用户设计的强大剪贴板管理工具&#xff0c;旨在提升用户的工作效率和数据管理体验。它通过智能化的剪贴板内容管理&#xff0c;实现了Mac系统与用户操作之间的无缝衔接。CleanClip支持多种连接方式&#xff0c;包括系统级的快捷操作和自定义快捷键&#…

PHP API 框架:构建高效API的利器

在当今快速发展的互联网时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同应用程序和服务的关键。PHP&#xff0c;作为一种流行的服务器端脚本语言&#xff0c;提供了多种强大的框架来简化API的开发。本文将介绍PHP API框架的重要性&#xff0c;以及…

【宠物小精灵之收服(待更新)】

题目 代码 #include <bits/stdc.h> using namespace std; int f[1010][510]; int main() {int n, m, k;cin >> n >> m >> k;int c 0;for(int i 1; i < k; i){int cost, hp;cin >> cost >> hp;for(int j n; j > cost; j--){for(i…

yarn : 无法加载文件 C:\Users\Rog\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本

yarn : 无法加载文件 C:\Users\Rog\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本 设置命令行窗口默认以管理员身份运行&#xff0c;在此基础上输入以下代码&#xff0c;应该就好使了&#xff0c;切记&#xff0c;以下代码才是关键&#xff0c;我基本上…

肾癌的多模态预测模型-临床-组织学-基因组

目录 摘要 技术路线 ① lncRNA的预测模型 ②病理 WSI 的分类器 ③临床病理分类器 模型结果 与别的模型比较 同行评审学习 1&#xff09;使用lncRNA的原因 2&#xff09;模型临床使用意义 3&#xff09;关于截止值的使用 摘要 A multi-classifier system integrated…

树莓派3B驱动ST7735(内核)(代码篇)(TODO)

书接上回&#xff1a;树莓派3B驱动ST7735&#xff08;内核&#xff09;&#xff08;配置篇&#xff09;_st7735s驱动固件下载-CSDN博客&#xff0c;这次主要是精读一下树莓派内核中的ST7735驱动源码 &#xff08;TODO&#xff09;

Elasticsearch不停机切换(上云)方案

如何给飞行中的飞机换引擎? 背景 业务背景 略 技术背景 线下集群40个索引左右&#xff0c;总数据量不大,不到100G因为ES承担的业务鉴权业务&#xff0c;所以不能接受停机割接 还有就是ES中数据来自各个业务方&#xff0c;推送的时机不定&#xff0c;也没有完备的重推机制&…