安装以及使用Minio分布式文件系统

简介

MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。

它一大特点就是轻量,使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。

官网:https://min.io

中文:https://www.minio.org.cn/,http://docs.minio.org.cn/docs/

MinIO集群采用去中心化共享架构,每个结点是对等关系,通过Nginx可对MinIO进行负载均衡访问。

安装与运行

下载MinIO:访问MinIO的官方网站https://min.io/)并导航到下载页面。选择适用于您操作系统的MinIO二进制文件进行下载。

这里我下载的是windows版本的,然后执行:

minio.exe server F:\project\minIO\minio\minIoData

访问MinIO管理界面:在浏览器中访问 http://localhost:9000,看到MinIO的管理界面,账号密码是minioadmin,同时创建你想要储存的文件的bucket。

设置为public 

 要改变accesskey的话:

输入bucket的名称,点击“CreateBucket”,创建成功

整合

 在安装MinIO服务器后,可以使用Spring Boot来接收前端上传的图片,并将其保存到MinIO,然后获取图片的访问链接。以下是实例代码:

添加MinIO Java客户端依赖:在Spring Boot项目的构建文件(如pom.xml)中,添加以下依赖:

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

创建MinIO配置:在Spring Boot的配置文件中,添加MinIO服务器的端点和访问凭证配置:

minio:endpoint: http://localhost:9000accessKey: minioadminsecretKey: minioadminbucket:bucket1: picture #对应桶的名字

创建文件上传接口:创建一个Spring Boot的Controller类,定义文件上传的接口:

import io.minio.MinioClient;
import io.minio.errors.MinioException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;@RestController
@RequestMapping("/api/files")
public class FileUploadController {@Value("${minio.endpoint}")private String minioEndpoint;@Value("${minio.accessKey}")private String minioAccessKey;@Value("${minio.secretKey}")private String minioSecretKey;@Value("${minio.bucket.bucket1}")private String bucket;@PostMapping("/upload")public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {try {// 创建MinIO客户端MinioClient minioClient = MinioClient.builder().endpoint(minioEndpoint).credentials(minioAccessKey, minioSecretKey).build();// 检查存储桶是否存在,如果不存在则创建String bucketName = bucket;boolean isExist = minioClient.bucketExists(bucketName);if (!isExist) {minioClient.makeBucket(bucketName);}// 上传文件到MinIOString objectName = file.getOriginalFilename();minioClient.uploadObject(bucketName, objectName, file.getInputStream(), file.getSize(), file.getContentType());// 获取文件的访问链接String fileUrl = minioClient.getObjectUrl(bucketName, objectName);return ResponseEntity.ok(fileUrl);} catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {e.printStackTrace();return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();}}
}

代码中,/api/files/upload 是文件上传接口的URL路径,它接收前端上传的文件,并将文件保存到MinIO服务器中。在接口的实现中,我们使用MinIO Java客户端来完成文件上传和获取文件访问链接的操作。

这样返回的fileUrl就可以直接访问到图片或者是视频等文件资源了:

访问到图片了 

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

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

相关文章

算法学习系列(七):快速排序、归并排序

目录 引言一、快速排序1.模板一2.模板二 二、归并排序1.模板一 三、例题扩展1.第k个数2.逆序对的个数 引言 对于快排和归并排序这个相信大家都知道&#xff0c;是非常重要的&#xff0c;不论是在找工作、考研、竞赛&#xff0c;这两个排序可以说是非常的重要&#xff0c;在面试…

在线工具分享SQL转ElasticSearchDSL语句

&#x1f60a; 作者&#xff1a; 瓶盖子io &#x1f496; 主页&#xff1a; 瓶盖子io-CSDN博客

Go实现http同步文件操作 - 增删改查

http同步文件操作 - 增删改查 http同步文件操作 - 增删改查1. 前置要求1.1. 构建结构体 文件名 文件内容1.1.1. 页面结构体1.1.2. 为Page结构体绑定方法&#xff1a;Save1.1.3. 对Page结构体支持页面内容查看方法&#xff0c;同时提供页面文件是否存在的方法 1.2. 简单验证上面…

【思路代码详解】2023mathorcup大数据复赛B题妈妈杯高校数学建模挑战赛电商零售商家需求预测及库存优化问题

2023 年 MathorCup 高校数学建模挑战赛——大数据竞赛 赛道 B复赛&#xff1a;电商零售商家需求预测及库存优化问题 问题一 目标&#xff1a;制定补货计划&#xff0c;基于预测销量。 背景&#xff1a;固定库存盘点周期NRT1, 提前期LT3天。 初始条件&#xff1a;所有商品…

在线教育小程序如何一键生成App

在线教育行业是指通过互联网平台提供的各种教育和培训服务。这不仅包括传统的课程学习&#xff0c;还涵盖了一系列创新的学习模式。例如&#xff0c;同步在线课程允许学生和教师在同一时间在线&#xff0c;通过实时的视频和聊天工具进行互动。而异步在线课程则为学生提供了更大…

nodejs流

什么是流 stream 流是用于在 Node.js 中处理流数据的抽象接口。 node:stream 模块提供了用于实现流接口的 API。 什么是流数据 流数据是指一组顺序、大量、快速、连续到达的数据序列&#xff0c;一般情况下数据流可被视为一个随时间延续而无限增长的动态数据集合。流数据应用…

外包实在是太坑了,划水三年,感觉人都废了

先说一下自己的情况&#xff0c;专科生&#xff0c;19年通过校招进入杭州某个外包软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

Python绘制几种常见的时序分析图

时间序列数据是一种按照时间顺序排列的观测值集合&#xff0c;每个观测值对应于一个特定的时间点。这种数据在许多领域中都具有重要的应用价值&#xff0c;如金融、经济、气候科学等。通过分析时间序列数据&#xff0c;可以帮助我们掌握潜在的模式、发现趋势和季节性波动等重要…

数据可视化在电商中的威力:改变经营的新趋势

随着电商行业的迅速发展&#xff0c;数据可视化在电商经营中扮演着越来越重要的角色。我接手的许多可视化大屏设计工作都来自于各类电商店铺&#xff0c;今天让我们一起来看看数据可视化是如何改变电商经营的。 首先&#xff0c;通过数据可视化可以更好地洞察消费者行为。通过…

网络编程基础api

1. IP 协议 1.1 IP 分片 &#xff08;1&#xff09;IP 分片和重组主要依靠 IP 头部三个字段&#xff1a;数据报标识、标志和片偏移 以太网帧的 MTU 是 1500 字节&#xff1b; 一个每个分片都有自己的 IP 头部&#xff0c;它们都具有相同的标识值&#xff0c;有不同的片偏移…

Python与ArcGIS系列(十六)重复节点检测

目录 0 简述1 实例需求2 arcpy开发脚本0 简述 在处理gis线图层和面图层数据时,有时候会遇到这种情况:数据存在重复节点或伪重复节点(两个节点距离极小),往往我们需要对这种数据进行检测标注或进行修改。本篇将介绍如何利用arcpy及arcgis的工具箱实现这个功能。 1 实例需求…

Java-网络通信总结

文章目录 网络程序设计基础局域网与互联网 网络协议IP协议TCP/IP 协议端口域套接字 TCP 程序InterAddress 类ServerSocket 类 UDP 程序DatagramPacket 类DatagramSocket 类 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素…