springboot集成minIO
文件系统:负责管理和存储文件的系统软件。操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件
minIO:轻量级服务分布式文件系统,适合存储非机构化数据。采用去中心化共享架构,结点之间是对等关系。
端口号为9000,初次登录账号密码都是minioadmin
minIO中使用bucket的概念来分隔管理文件,当然我们也可以在设置object的时候通过2024/7/3/myPic.jpg在bucket中生成对应的文件夹方便文件管理
以下是通过minIO实现的文件管理
这里使用的是很经典的建造者模式,bucket代表你所选择的桶,object代表你要存放在当前桶的具体名称/具体位置,filename则是你要存放在文件在当前磁盘的具体位置。
public class MinIOtest {
MinioClient minioClient = MinioClient.builder()
.endpoint("http://192.168.101.65:9000")
.credentials("minioadmin", "minioadmin")
.build();
@Test
public void upload() {
try {
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("test")
.object("pic.jpg")
.filename("C:\\Users\\17900\\Pictures\\74721741_p0_master1200.jpg")
.build()
);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void delete() {
try {
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket("test")
.object("pic.jpg")
.build());
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void search() {
try {
FilterInputStream test = minioClient.getObject(
GetObjectArgs.builder()
.bucket("test")
.object("pic.jpg")
.build()
);
// 指定输出流输出
FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Users\\17900\\Pictures\\74721741_p0_master1200.jpg"));
IOUtils.copy(test, fileOutputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
}
当我们使用springboot接受一个MultipartFile文件时,苦于无法直接传递他的绝对路径以便于后面filename的使用。
我们通过File.createTempFile()来生成一个临时文件,再将上述MultipartFile文件通过transferTo将文件内容传给这个临时文件。这时我们可以把这个临时文件上传给远程minIO以供保存,
下述示例中,我们可以通过absolutePath将文件传递给fileName从而实现图片远程保存。
@ApiOperation("上传文件接口")
@RequestMapping(value = "/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public UploadFileResultDto uploadCoursefile(@RequestPart("filedata")MultipartFile filedata) throws IOException {
File tempFile=File.createTempFile("minio", "temp");
filedata.transferTo(tempFile);
String absolutePath = tempFile.getAbsolutePath();
return mediaFileService.upload(filedata,absolutePath);
}
24/7/5新增:通过minIO实现对分块文件的合并
@Test
void merge() {
List<ComposeSource> composeSources = Stream.iterate(0, i -> ++i)
.limit(5)
.map(i -> ComposeSource.builder().bucket("test").object("chunk/" + i).build())
.collect(Collectors.toList());
try {
minioClient.composeObject(ComposeObjectArgs.builder()
.bucket("test")
.object("merge.mp4")
.sources(composeSources)
.build());
} catch (Exception e) {
}
}
springboot集成minIO的更多相关文章
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- SpringBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
- springboot集成redis(mybatis、分布式session)
安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...
- SpringBoot集成jsp
一.springBoot集成jsp: 1.修改pom文件 <!--集成jsp所需jar包--> <!--jsp页面使用jstl标签--> <dependency> ...
- springboot集成schedule(深度理解)
背景 在项目开发过程中,我们经常需要执行具有周期性的任务.通过定时任务可以很好的帮助我们实现. 我们拿常用的几种定时任务框架做一个比较: 从以上表格可以看出,Spring Schedule框架功能完善 ...
随机推荐
- Android 12(S) Binder(一)
今天开始了解一下binder,就先从ServiceManager开始学习. 网上的相关博文普遍是Android 11之前的,阅读时对比Android 11或12的代码发现有很多内容找不到了,比如 fr ...
- 莫烦tensorflow学习记录 (7)循环神经网络 RNN & LSTM
莫凡大佬的原文章https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-RNN/ RNN 的用途 可以读取数据中的顺序,获取顺序 ...
- redhat8 添加scsi类型的硬盘后开机重配虚拟机 且黑屏
原因:因为vmware磁盘优先级里nvme类型的磁盘比scsi类型的磁盘优先级高,所以开机先启动scsi类型的磁盘 又因为scsi并不是系统盘所以不能够实现开机 解决方法: 改变vmware的磁盘优先 ...
- CF Round 881 (Div. 3)
CF Round 881 (Div. 3) Div. 3 果然简单,虽然但是,我还是有 1 道题没有想出来. A.Sasha and Array Coloring 排序双指针向内即可. https:/ ...
- IDEA 新建 MAVEN JAVA 控制台程序 Console
IDEA 新建 MAVEN JAVA 控制台程序 Console File - New - Project-左侧选择 Maven,右侧勾选"Create from archetype&quo ...
- java8 Lambda及Stream学习笔记
Lambda表达式Lambda 表达式可以替代只有一个抽象函数的接口实现. Lambda表达式同时还提升了对集合.框架的迭代.遍历.过滤数据的操作. Lambda表达式使用场景任何有函数式接口的地方 ...
- kafka事务流程
流程 kafka事务使用的5个API // 1. 初始化事务 void initTransactions(); // 2. 开启事务 void beginTransaction() throws Pr ...
- 常用的jvm一些监控命令
一.jmap 查看堆内对象示例的统计信息 jmap -heap pid 描述:查看堆信息 jmap -histo:live pid | head -30 描述:显示堆中对象的统计信息 命令:jmap ...
- PhantomReference 和 WeakReference 究竟有何不同
本文基于 OpenJDK17 进行讨论,垃圾回收器为 ZGC. 提示: 为了方便大家索引,特将在上篇文章 <以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的> 中讨 ...
- 07-Python异常处理
什么是异常? Python无法正常处理程序时就会发生一个异常,这时Python就会抛出一个对象,表示这是一个错误. 必须处理异常,否则程序可能会停止运行,或者出现异常现象. 如:4/0就会抛出异常,因 ...