Minio 文件上传(后端处理同文件判断,同一文件秒传)
记录minio 文件上传
MinIO提供多个语言版本SDK的支持,下边找到java版本的文档:
地址:https://docs.min.io/docs/java-client-quickstart-guide.html
maven依赖如下:
XML
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.4.3</version>
</dependency>
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.8.1</version>
</dependency>
需要三个参数才能连接到minio服务。
参数 说明
Endpoint 对象存储服务的URL
Access Key Access key 就像用户ID,可以唯一标识你的账户。
Secret Key Secret key 是你账户的密码。
1.上传
1.1 配置注入
package com.zhan.Config;import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** minio 配置注入*/@Data
@ConfigurationProperties(prefix = "minio")
@Configuration
public class MinioConfiguration {private String endpoint;private String accessKey;private String secretKey;private String bucketName;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();}
}
1.2 上传一个文件
/*** 上传一个文件* @param stream* @param bucket* @param objectName // 文件名* @throws Exception*/public void uploadFile(InputStream stream, String bucket, String objectName) throws Exception {minioClient.putObject(PutObjectArgs.builder().bucket(bucket).object(objectName).stream(stream, -1, 10485760).build());}
@Testpublic void upload() {//根据扩展名取出mimeTypeContentInfo extensionMatch = ContentInfoUtil.findExtensionMatch(".mp4");String mimeType = MediaType.APPLICATION_OCTET_STREAM_VALUE;//通用mimeType,字节流if(extensionMatch!=null){mimeType = extensionMatch.getMimeType();}try {UploadObjectArgs testbucket = UploadObjectArgs.builder().bucket("testbucket")
// .object("test001.mp4").object("001/test001.mp4")//添加子目录.filename("D:\\develop\\upload\\1mp4.temp").contentType(mimeType)//默认根据扩展名确定文件内容类型,也可以指定.build();minioClient.uploadObject(testbucket);System.out.println("上传成功");} catch (Exception e) {e.printStackTrace();System.out.println("上传失败");}}
2.删除
@Test
public void delete(){try {minioClient.removeObject(RemoveObjectArgs.builder().bucket("testbucket").object("001/test001.mp4").build());System.out.println("删除成功");} catch (Exception e) {e.printStackTrace();System.out.println("删除失败");}
}
3. ☆查询文件 (后端处理同文件判断,同一文件秒传)
@Transactional@ApiOperation("上传一个文件")@RequestMapping(value = "/uploadfild",method = RequestMethod.POST)public ResponseUtils fileupload(@RequestParam("file") MultipartFile multipartFile, @RequestParam(defaultValue = "****") String bucket, @RequestParam(required = false) String objectName) throws Exception {MediaResources mediaResources = new MediaResources();/*** 方法默认的保存路径为:C:\Documents and Settings\Administrator\Local Settings\Temp*///立即删除文件 file.delete(); //在JVM退出时删除文件 file.deleteOnExit();File tempFile = File.createTempFile("minio","temp");/*** 先获取流 后面会改变*/InputStream stream = multipartFile.getInputStream();/*** 上传的文件拷贝到临时文件*/multipartFile.transferTo(tempFile);String absolutePath = tempFile.getAbsolutePath();FileInputStream fileInputStream = new FileInputStream(new File(absolutePath));String s_md5 = DigestUtils.md5Hex(fileInputStream);//删除tempFile.delete();/*** 数据放入*/mediaResources.setFileUniqueValue(s_md5);mediaResources.setBucket(bucket);mediaResources.setAccessAddress("/"+bucket+"/"+multipartFile.getOriginalFilename());mediaResources.setUploadedBy("zhan_yuan");mediaResources.setUploadTime(new Date());mediaResources.setState("以审核");String[] s = multipartFile.getOriginalFilename().split("\\.");ContentInfo ex = ContentInfoUtil.findExtensionMatch("."+s[1]);mediaResources.setFileType(ex.getMimeType());mediaResources.setFileName(multipartFile.getOriginalFilename());/*** 新增*/mediaResourcesService.save(mediaResources);minioUtil.createBucket(bucket);if(objectName != null) minioUtil.uploadFile(stream,bucket,objectName+"/"+multipartFile.getOriginalFilename());else minioUtil.uploadFile(stream,bucket,multipartFile.getOriginalFilename());return ResponseUtils.success("/"+bucket+"/"+multipartFile.getOriginalFilename());}

相关文章:
Minio 文件上传(后端处理同文件判断,同一文件秒传)
记录minio 文件上传 MinIO提供多个语言版本SDK的支持,下边找到java版本的文档: 地址:https://docs.min.io/docs/java-client-quickstart-guide.html maven依赖如下: XML <dependency><groupId>io.minio</groupId…...
模拟IIC通讯协议(stm32)(硬件iic后面在补)
一、IIC基础知识总结。 1、IIC通讯需要两条线就可以,SCL、SDA。 2、IIC的数据传输的速率,不同的ic是不同的,根据电平维持的延时函数的时间来确定IIC数据传输的速率. 3、IIC的延时函数可以使用延时函数,延时函数一般使用系统滴答时…...
使用注解读取properties配置文件
文章目录 1、背景2、注解方式2.1 PropertySource 、 ConfigurationProperties2.2 读取properties中全部字段值ConfigurationProperties2.3 读取properties中部分字段值:value("${自定义key}") 1、背景 服务中使用到了redis,需要配置redis连接…...
Python---练习:求世界杯小组赛的总成绩(涉及:布尔类型转换为整型)
案例 世界杯案例 需求: 世界杯案例,世界杯小组赛的比赛规则是我们的球队与其他三支球队进行比赛,然后根据总成绩(积分)确定出线资格。小组赛球队实力已知(提示用户输入各球队实力),我们通过一个数字表示。如果我们赢…...
vue3学习源码笔记(小白入门系列)------KeepAlive 原理
目录 说明组件是如何被缓存的,什么时候被激活对于KeepAlive 中组件 如何完成激活的对于KeepAlive 中组件 如何完成休眠的 总结 说明 Vue 内置了 KeepAlive 组件,实现缓存多个组件实例切换时,完成对卸载组件实例的缓存,从而使得组…...
边写代码边学习之mlflow
1. 简介 MLflow 是一个多功能、可扩展的开源平台,用于管理整个机器学习生命周期的工作流程和工件。 它与许多流行的 ML 库内置集成,但可以与任何库、算法或部署工具一起使用。 它被设计为可扩展的,因此您可以编写插件来支持新的工作流程、库和…...
基于吉萨金字塔建造优化的BP神经网络(分类应用) - 附代码
基于吉萨金字塔建造优化的BP神经网络(分类应用) - 附代码 文章目录 基于吉萨金字塔建造优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.吉萨金字塔建造优化BP神经网络3.1 BP神经网络参数设置3.2 吉萨金字…...
axios的post请求所有传参方式
Axios支持多种方式来传递参数给POST请求。以下是一些常见的方式: 作为请求体: 你可以将参数作为请求体的一部分,通常用于发送表单数据或JSON数据。例如: const data { key1: value1, key2: value2 }; axios.post(/api/endpoint, …...
【c++】向webrtc学比较2: IsNewerSequenceNumber 用于NackTracker及测试
LatestSequenceNumber inline uint16_t LatestSequenceNumber(uint16_t sequence_number1,uint16_t sequence_number2) {return IsNewerSequenceNumber(sequence_number1, sequence_number2)? sequence_number1: sequen...
PRCV 2023:语言模型与视觉生态如何协同?合合信息瞄准“多模态”技术
近期,2023年中国模式识别与计算机视觉大会(PRCV)在厦门成功举行。大会由中国计算机学会(CCF)、中国自动化学会(CAA)、中国图象图形学学会(CSIG)和中国人工智能学会&#…...
深度学习硬件配置推荐(kaggle学习)
目录 1. 基础推荐2. GPU显存与内存是一个1:4的配比?3. deep learning 入门和kaggle比赛4. 有些 Kaggle 比赛数据集很大,可能需要更多的 GPU 显存,请推荐显存4. GDDR6和HBM25. HDD 或 SATA SSD 1. 基础推荐 假设您作为一个深度学习入门学者的…...
1019hw
登录窗口头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QToolBar> #include <QMenuBar> #include <QPushButton> #include <QStatusBar> #include <QLabel> #include <QDockWidget>//浮动窗口…...
两分钟搞懂UiAutomator自动化测试框架
1. UiAutomator简介 UiAutomator是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,基于Accessibility服务。其最大的特点就是可以跨进程操作,可以使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操作…...
Fast DDS之Subscriber
目录 SubscriberSubscriberQosSubscriberListener创建Subscriber DataReaderSampleInfo读取数据 Subscriber扮演容器的角色,里面可以有很多DataReaders,它们使用Subscriber的同一份SubscriberQos配置。Subscriber可以承载不同Topic和数据类型的DataReade…...
测试PySpark
文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…...
C语言- 原子操作
基本概念 在C语言(尤其是C11标准之后)中,原子操作提供了一种机制,使得程序员可以在并发环境中,不使用互斥或其他同步原语,而直接对数据进行操作,同时确保数据的完整性和一致性。 原子变量和原子操作的核心思想是:无论什么时候,只有一个线程能够看到变量的修改操作。…...
设置hadoop+安装java环境
上一篇 http://t.csdnimg.cn/K3MFS 基本操作 接着上一篇 先导入之前导出的虚拟机 选择导出到对应的文件夹中 这里修改一下保存虚拟机的位置(当然你默认也可以) 改一个名字 新建一个share文件夹用来存放共享软件的文件夹 在虚拟机的设置中找到这个设置…...
阿里云新加坡主机服务器选择
阿里云新加坡主机有哪些选择?可以选择云服务器ECS或轻量应用服务器,都有新加坡地域可以选择,东南亚地区可以选择新加坡、韩国首尔、日本东京等地域,阿里云新加坡主机测试IP地址:161.117.118.93 可以测试下本地到新加坡…...
21天打卡掌握java基础操作
Java安装环境变量配置-day1 参考: https://www.runoob.com/w3cnote/windows10-java-setup.html 生成class文件 java21天打卡-day2 输入和输出 题目:设计一个程序,输入上次考试成绩(int)和本次考试成绩࿰…...
SQL题目记录
1.商品推荐题目 1.思路: 通过取差集 得出要推荐的商品差集的选取:except直接取差集 或者a left join b on where b null 2.知识点 1.except selectfriendship_info.user1_id as user_id,sku_id fromfriendship_infojoin favor_info on friendship_in…...
Docker核心技能全解析,容器化部署不再难
一、Docker核心概念:搞懂这3个词,入门就成功了一半 在动手操作前,先理清Docker的核心组件,避免陷入"会操作不会原理"的困境: 容器(Container):Docker的核心运行单元&…...
百度网盘下载加速终极方案:免费解锁满速下载的完整指南
百度网盘下载加速终极方案:免费解锁满速下载的完整指南 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘下载速度只有几十KB/s而烦恼吗?你是否曾经面对大文件下载时感到绝望?…...
路径构建引擎:开源角色养成系统的架构解析与实践指南
路径构建引擎:开源角色养成系统的架构解析与实践指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 一、价值定位:构建虚拟角色的数字孪生平台 …...
Linux:模式通配符 * 和globstar **(bash4新增)的使用
相关文章 Linux专栏https://blog.csdn.net/weixin_45791458/category_12234591.html 在bash的使用过程中,模式通配符可以说是最常见、也最实用的一类功能。很多时候我们在命令行里处理文件,并不是靠把完整文件名一个个手工敲出来,而是通过ba…...
实战应用:基于快马平台开发智能家居设备配对与控制中心
最近在做一个智能家居设备的控制中心项目,正好用InsCode(快马)平台快速实现了原型开发。这个项目最核心的就是设备配对功能,下面分享下我的实战经验。 项目架构设计 整个控制中心采用前后端分离架构,前端用ReactTypeScript实现,后…...
戴尔G15终极散热控制指南:告别AWCC臃肿,拥抱轻量级开源方案
戴尔G15终极散热控制指南:告别AWCC臃肿,拥抱轻量级开源方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为戴尔G15笔记本的高温…...
AI辅助开发:让快马AI帮你构思vc16188视频目标识别代码框架
最近在做一个视频分析的小项目,需要实现目标识别功能。作为一个独立开发者,面对复杂的计算机视觉算法确实有点头疼。好在发现了InsCode(快马)平台的AI辅助开发功能,帮我快速搭建起了vc16188视频目标识别的代码框架。这里分享一下我的实现过程…...
提升Adobe Illustrator开发效率的自动化脚本工具集
提升Adobe Illustrator开发效率的自动化脚本工具集 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在设计开发流程中,重复性操作、多文件管理和格式标准化往往消耗大量时…...
告别数据孤岛:LTspice与MATLAB的电路仿真数据桥接方案
告别数据孤岛:LTspice与MATLAB的电路仿真数据桥接方案 【免费下载链接】ltspice2matlab LTspice2Matlab - Import LTspice data into MATLAB 项目地址: https://gitcode.com/gh_mirrors/lt/ltspice2matlab 在电路设计的日常工作中,工程师们常常面…...
Docker部署AnythingLLM踩坑记:解决SQLite数据库文件无法打开的权限问题
Docker部署AnythingLLM权限问题深度解析:从SQLite报错到容器用户管理实践 部署AnythingLLM时遇到SQLite unable to open database file错误?这背后隐藏着Docker容器用户权限管理的核心知识。本文将带你从表面错误深入到容器用户权限体系的本质࿰…...
