分布式文件系统--MinIO

embedded/2024/10/18 12:26:01/

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配置类

java">@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容器

java">@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接口

java">@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.ppmy.cn/embedded/16335.html

相关文章

软考-论文写作-论架构风格论文

题目 素材 框架 一、 摘要 2020年12月,我参加了某省政协委员履职系统的开发。该系统为政协机关人员线上开展各项工作以及委员完成各项履职提供了全方位的软件支撑。我在该项目重担任系统架构师一职,负责履职系统的架构设计。本文结合实践,以委员履职系统为例,主要讨论软件…

使用mybatis的时候报错,ora 00942 表或视图不存在

因为我的Spring cloud项目&#xff0c;数据库有多个数据源&#xff0c;在当前类中使用的com.baomidou.dynamic.datasource.annotation的DS(“a”),a其中一个数据源&#xff0c;但是我用的方法中&#xff0c;用到了其他的数据源b的查询&#xff0c;这就会报错ora 00942 表或视图…

Android音视频开发-AudioTrack

Android音视频开发-AudioTrack 本篇文章我们主要介绍下AudioTrack. 1: 简介 AudioTrack是Android平台上的一个类&#xff0c;用于播放音频数据. 它允许PCM音频缓冲区流式传输到音频接收器进行播放. 创建AudioTrack对象&#xff1a;可以通过构造函数创建AudioTrack对象&…

AjaxAxios

Ajax 注&#xff1a;AJAX很少使用&#xff0c;现在都使用更简单的Axios所以只需要了解Ajax即可 概念 AJAX&#xff0c;全称“Asynchronous JavaScript and XML”&#xff08;异步JavaScript和XML&#xff09; 作用&#xff1a; 与服务器进行数据交换&#xff0c;通过Ajax可…

Visual Studio Code 快捷键大全

文章目录 1. 全局快捷键2. 基本编辑3. 导航4. 查找 & 替换5. 多光标 & 选择6. 代码编辑7. 编辑器管理8. 文件管理9. 显示10. Debug 调试11. 终端&#xff08;Terminal&#xff09; 1. 全局快捷键 快捷键说明Ctrl Shift P&#xff0c;F1显示命令面板Ctrl P快速打开&am…

数据结构之队列

片头 嗨,小伙伴们,大家好! 在上一篇中,我们学习了栈,那么在这一章中我们将学习队列的相关知识,准备好了吗 ? Ready Go ! ! ! 一、队列 1.1 队列的基本概念 在上一章中&#xff0c;我们学习了数据结构之栈,知道了栈遵循后进先出(LIFO)原则。与栈相对的&#xff0c;队列中的数…

JavaEE——spring MVC请求处理

目录 主要目的&#xff1a; 1. Spring web 项目搭建 2. 添加依赖 3. 配置插件 4. 配置设置类 5. 编写controller层类 6. 编写测试的http请求 主要目的&#xff1a; 创建一个spring web项目&#xff1b; 创建控制类&#xff1b; 掌握如何配置MVC&#xff1b; 编写htt…

无人机+遥控器:遥控数传链路二合一远距离传输遥控器技术详解

无人机遥控器是无人机飞行控制的重要组成部分&#xff0c;用于向无人机发送控制指令和接收无人机的状态信息。无人机遥控器通常具备多种功能&#xff0c;如开关机、起飞降落、飞行方向控制、摄像头控制等。 无人机遥控器大多数都具备以下基本特点&#xff1a; 无线传输&#x…