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框架功能完善 ...
随机推荐
- .net Core中实现SHA加密
#region 用SHA1加密字符串 /// <summary> /// 用SHA1加密字符串 /// </summary> /// <param name=" ...
- ReplayKit2 有线投屏项目总结
一.实现目标 iOS11.0以上设备通过USB线连接电脑,在电脑端实时看到手机屏幕内容 画质达到超清720级别,码率可达到1Mbps以上 二.实现技术方案设计 1.手机端采用ReplayKit2框架, ...
- 2023 Hive 面试大纲
先说一些废话 总结一下Hive面试宝典中的要点,方便读者快速过一遍Hive面试所需要的知识点. 本文请搭配 Hive面试宝典 来食用更美味哟 ┗( ▔, ▔ )┛ 方便自己系统性回忆,根据*的数量来标 ...
- 小米红米手机应用APP字体太小
小米红米手机应用APP字体太小 调整了手机显示大小,只能解决一点点,还是有点小,比如B站.微博. 调整了系统字体大小,B站.微博又不受系统字体大小控制. 只能通过修改最小宽度来解决. 1.打开开发者选 ...
- 算法金 | 一文彻底理解机器学习 ROC-AUC 指标
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 在机器学习和数据科学的江湖中,评估模型的好坏是非常关键的一环.而 ROC(Rece ...
- work03
第一题: 1.定义一个包含十个元素的数组.数组元素自己给出 2.遍历打印出数组元素 3.求出数组当中的最小值打印出来 4.求出数组当中的最大值打印出来 5,求数组当中 第二大 值 第二题: 1.定义一 ...
- 网络世界的脊柱——OSI七层模型
简介 OSI代表开放系统互联(Open Systems Interconnection),这是国际标准化组织(ISO)提出的一个概念模型,用于描述网络通信的功能划分.简单来说,OSI模型把复杂的网络通 ...
- LocalDateTime与LocalDate之间转换
LocalDateTime与LocalDate之间转换 //LocalDateTime转换LocalDate LocalDateTime now2 = LocalDateTime.now(); Loc ...
- Mysql慢sql优化
Mysql慢sql优化 index1.MySQL的执行过程2.索引的定义3.MySQL执行计划explain or desc4.索引使用/创建规则5.弊端6.设计规范7.SQL建议 1. MySQL ...
- 什么是浅拷贝和深拷贝,如何用 js 代码实现?
〇.简介和对比 简介 浅拷贝:只复制原始对象的第一层属性值. 如果属性值是值类型,将直接复制值,本值和副本变更互不影响: 如果是引用数据类型,则复制内存地址,因此原始对象和新对象的属性指向相同 ...