分布式文件系统--MinIO

1 MinIO安装(Docker)

        ●在root目录下新建docker_minio文件夹

        ●在docker_minio文件夹下新建config文件夹,data文件夹

        ●在root目录下新建docker_compose文件夹,在docker_compose文件夹中添加docker-compose.yaml

services:minio:image: quay.io/minio/miniocontainer_name: minio_containerports:- "9000:9000" #api接口(内部访问)- "9001:9001" #控制台端口(外部界面)environment:TZ: Asia/Shanghai #时区上海MINIO_ROOT_USER: abc #管理后台用户名MINIO_ROOT_PASSWORD: abc #管理后台密码(最少8个字符)MINIO_COMPRESS: "off" #开启压缩(on开启,off关闭)MINIO_COMPRESS_EXTENSIONS: "" #扩展名  .pdf  .doc为空,所有类型均压缩MINIO_COMPRESS_MIME_TYPES: "" #mine类型application/pdf为空,所有类型均压缩volumes:- "/root/docker_minio/data:/data" #映射当前目录下的打他目录至容器内/data目录- "/root/docker_minio/config:/root/.minio" #映射配置目录command: server --address ':9000' --console-address ':9001' /data #服务器地址是9000,服务器控制台地址是9001,数据储存在/data下privileged: truenetworks:- sunner_network

        ●通过docker compose up -d命令执行docker-compose.yaml文件(必须在docker_compose文件夹目录下执行),然后系统会自动拉取minio镜像,创建并启动minio容器

​​​​​​​        ●执行docker ps -a命令,出现下图,表示安装和启动minio成功

2 MinIO的使用

        访问MinIO有2个端口,分别是9000端口和9001端口

                9000端口是用于内部访问,比如用户通过SpringBoot接口间接访问MinIO

                9001端口是用于外部访问,即通过浏览器访问

2.1 桶

        MinIO所有的文件都保存在中,可以将桶理解为文件夹

2.1.1新建桶

2.1.2 上传文件

2.2 网页访问图片

2.2.1 复制访问链接

        ●将127.0.0.1修改为MinIO所在服务器地址

        ●去掉访问链接后半段(去掉.png之后的)

2.2.2 修改桶权限为public

2.2.3 访问图片

        在浏览器的地址栏输入"访问链接"

3 SpringBoot集成MinIO

3.1 引入依赖

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.9</version>
</dependency>

3.2 application.yaml

minio:endpoint: http://123.123.123.123:9000  #minio所在服务器访问地址accessKey: abc  #用户名secretKey: abc  #密码

3.3 MinIO配置类

@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {private String endpoint;private String accessKey;private String secretKey;public String getEndpoint() {return endpoint;}public void setEndpoint(String endpoint) {this.endpoint = endpoint;}public String getAccessKey() {return accessKey;}public void setAccessKey(String accessKey) {this.accessKey = accessKey;}public String getSecretKey() {return secretKey;}public void setSecretKey(String secretKey) {this.secretKey = secretKey;}
}

3.4 通过MinIO配置类创建MinioClient,并注册进SpringIOC容器

@Configuration  //"配置类"注解
@MapperScan({"xyz.aboluo.minio.dao"})  //dao接口包扫描
//@EnableConfigurationProperties({Teacher.class})
public class MinioAutoConfiguration {@Autowiredprivate MinioProp minioProp;@Beanpublic MinioClient getMinioClient() {return MinioClient.builder().endpoint(minioProp.getEndpoint()).credentials(minioProp.getAccessKey(), minioProp.getSecretKey()).build();}@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址(允许任何地址访问)corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头(允许任何请求头访问)corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法(允许任何方法(GET,POST等等)方法)source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置return new CorsFilter(source);}
}

3.5 Controller接口

@RestController
@RequestMapping("/minioFileHandle")
public class MinioController {private static final Logger LOGGER = LoggerFactory.getLogger(MinioController.class);@Autowiredprivate MinioClient minioClient;/*** 获取bucket列表** @return*/@RequestMapping("/bucketList.do")public Result bucketList() throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {List<Map<String, String>> buckets = new ArrayList<>();for (Bucket bucket : minioClient.listBuckets()) {Map<String, String> returnBucket = new HashMap<>();returnBucket.put("bucketName", bucket.name());returnBucket.put("creationDateTime", bucket.creationDate().toString());buckets.add(returnBucket);}return Result.success(buckets);}/*** 查询bucket下的所有文件信息** @return*/@RequestMapping("/queryBucketFiles.do")public Result queryBucketFiles(@RequestParam String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {//检查桶是否存在if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {throw new SunnerRuntimeException(Result.ResultEnum.BUCKET_NOT_EXIST);}//遍历封装桶中的文件信息Iterator<io.minio.Result<Item>> iterator = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build()).iterator();List<Object> items = new ArrayList<>();while (iterator.hasNext()) {Item item = iterator.next().get();items.add(JSON.parse(String.format("{'fileName':'%s','fileSize':'%s','lastModified':'%s'}", item.objectName(), item.size(), Date.from(item.lastModified().toInstant()))));}return Result.success(items);}/*** 文件下载** @return*/@RequestMapping("/download.do")public Result download(@RequestParam String bucketName, @RequestParam String fileName, HttpServletResponse response) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {response.setHeader("picture-upload-date-time", URLEncoder.encode("abccc", StandardCharsets.UTF_8));response.getOutputStream().write(minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()).readAllBytes());return Result.returnVoid();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828754.shtml

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

相关文章

Vuforia AR篇(三)— AR模型出场效果

目录 前言一、AR模型出场二、AR出场特效三、添加过渡效果四、效果 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容。 一、AR模型出场 创建ARCamer…

vscode中对 python 快速增加header 描述

在首选项→配置用户代码片段→python 然后再 Code/User/snippets/python.json文件中写入 {// Place your snippets for python here. Each snippet is defined under a snippet name and has a prefix, body and // description. The prefix is what is used to trigger the …

web server apache tomcat11-20-connectors 连接器

前言 整理这个官方翻译的系列&#xff0c;原因是网上大部分的 tomcat 版本比较旧&#xff0c;此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎&#xff0c;轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

Three.js——基础材质、深度材质、法向材质、面材质、朗伯材质、Phong材质、着色器材质、直线和虚线、联合材质

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

【树莓派】强力烧写工具 Balena Etcher,烧写树莓派系统,树莓派系统克隆,备份

文章目录 使用Win32DiskImager备份和写入树莓派系统步骤一&#xff1a;下载和安装Win32DiskImager步骤二&#xff1a;准备工作步骤三&#xff1a;备份树莓派系统步骤四&#xff1a;写入树莓派系统 使用Balena Etcher给树莓派烧写系统Balena Etcher简介步骤一&#xff1a;下载Ba…

景区文旅实景剧本杀小程序系统开发搭建

开发景区文旅实景剧本杀小程序系统需要以下步骤&#xff1a; 1. 确定需求和功能&#xff1a;根据景区文旅实景剧本杀的特点和需求&#xff0c;确定系统需要具备的功能&#xff0c;如实景探索、剧情互动、角色扮演、任务挑战等。 2. 设计系统架构&#xff1a;根据需求和功能&a…

Mac安装telnet

一、安装Homebrew 1、打开官网&#xff1a;Homebrew — The Missing Package Manager for macOS (or Linux) 2、打开终端输入&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装Telnet bre…

【LAMMPS学习】八、基础知识(4.5)TIP5P水模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

C#鼠标拖拽无边框浮动窗体的方法:窗体控制

目录 (1)ReleaseCapture函数 (2)SendMessage函数 (3)实例 1.Resources.Designer.cs 2.Form1.Designer.cs 3.Form1.cs 一般情况下&#xff0c;在标题栏中按住鼠标左键不放即可实现拖动操作。 当做浮动窗体时&#xff0c;如果包含窗体边框&#xff0c;那么界面给使用者的感…

目标检测的迁移学习

目标检测的迁移学习是指利用已经在一个数据集上预训练好的目标检测模型&#xff0c;在另一个相关但不同的数据集上进行微调或者直接应用&#xff0c;以提升目标检测任务的性能。这种方法通常可以加快新数据集上的训练速度&#xff0c;并且可以在少量标注数据的情况下实现较好的…

代码随想录算法训练营第三十七天|738.单调递增的数字,968.监控二叉树

目录 738.单调递增的数字思路代码 968.监控二叉树思路代码 738.单调递增的数字 题目链接&#xff1a;704. 二分查找 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;贪心算法&#xff0c;思路不难想&#xff0c;但代码不好写&#xff01;LeetCode:738.单调自增的数字 思路…

园区智慧化转型新篇章:解码智慧技术如何助力园区实现精细化管理,提升运营效率

目录 一、智慧技术概述及其在园区管理中的应用 &#xff08;一&#xff09;物联网技术的应用 &#xff08;二&#xff09;大数据技术的应用 &#xff08;三&#xff09;云计算技术的应用 二、智慧技术助力园区实现精细化管理 &#xff08;一&#xff09;实现资源优化配置…

SqlServer 查询表、视图、存储过程被哪些引用

1.查询表、视图、存储过程在哪些视图、存储过程、函数中被使用 SELECT DISTINCT OBJECT_NAME(id) name FROM syscomments WHERE id IN ( SELECT idFROM sysobjectsWHERE type IN ( V, P ,TF) ) --V表示视图&#xff0c;P表示存储过程&#xff0c;TF表示函数AND (te…

OpenAI“VoiceEngine”震撼来袭,深度合成算法备案需抓紧

近日&#xff0c;OpenAI在官网首次展示了其全新自定义音频模型“VoiceEngine”&#xff0c;这一技术突破令人瞩目。通过仅提供15秒左右的参考声音&#xff0c;VoiceEngine便能生成几乎与原音一模一样的全新音频&#xff0c;无论是在清晰度、语音连贯性、音色还是自然度方面&…

轻松上手,无缝对接:详述如何接入企讯通空号检测接口API

企讯通空号检测接口API作为一款高效、精准的手机号码状态检测工具&#xff0c;能够帮助企业及开发者快速识别手机号码的有效性&#xff0c;优化通讯资源&#xff0c;提升营销效果。本篇文章将带领您一步步了解如何轻松、无缝地对接企讯通空号检测接口API&#xff0c;让您的业务…

【RAG 论文】Adaptive-RAG:自适应地根据 query 难度来选择合适的 RAG 模型

论文&#xff1a;Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity ⭐⭐⭐⭐ Code&#xff1a;github.com/starsuzi/Adaptive-RAG NAACL 2024&#xff0c;arXiv:2403.14403 文章目录 一、论文速读二、实现细节2.1 三种…

c++-msys2程序工作原理?

文章目录 1. 子系统&#xff1a;2. MinGW-w64&#xff1a;3. Pacman 包管理器&#xff1a;4. POSIX 兼容性&#xff1a; MSYS2 是一个为 Windows 用户设计的 Unix-like 开发环境和命令行接口&#xff0c;它允许用户在 Windows 上编译和运行许多原本为类 Unix 系统设计的软件。M…

使用FPGA实现逐级进位加法器

介绍 逐级进位加法器就是将上一位的输出作为下一位的进位输入&#xff0c;依次这样相加。下面以一个8位逐级进位加法器给大家展示。 我增加了电路结构&#xff0c;应该很容易理解吧。 下面我也列举了一位加法器&#xff0c;可以看下。 电路结构 设计文件 1位加法器 librar…

Docker 的数据管理 端口映射 容器互联 镜像的创建

目录 概念 概念 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。总结&#xff1a;因为容器数据是临时保存的为了安全&#xff0c;就要让数据保持持久化。 1&#…

OceanBase单机版安装体验

前情提要 上周OceanBase开发者大会过后&#xff0c;作为观察员也来体验一下OB的安装。业内有某个国产安装用了两周&#xff0c;这种其实有点劝退了。话说就是10年前&#xff0c;没搞过Oracle的人也不用两周安装一个数据库啊。今天看看OB的&#xff08;一体化&#xff09;安装。…