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());}

在这里插入图片描述

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

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

相关文章

Flask Web 安装bootstrap失败pip install bootstrap

失败原因&#xff1a;网速太慢了 把公共wifi换成手机热点&#xff0c;成功&#xff1a;&#xff09; &#x1f603; 更新&#xff1a;开了手机热点还是报下面的错&#xff0c;但是把科学上网关了&#xff0c;就成功了&#xff0c;反正就是网络问题

基于nodejs+vue 衣服穿搭推荐系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

分布式链路追踪系统Skywalking的部署和应用

一&#xff0c;背景 随着业务的扩张, 系统变得越来越复杂, 由前端、app、api,微服务,数据库,缓存,消息队列,关系数据库, 列式数据库等构成了繁杂的分布式网络. 当出现一个调用失败的问题时,要定位异常在哪个服务,需要进入每一个服务里看日志, 这个过程的复杂度和工作量是不可想…

【XSS_MSN】基于GCN的web攻击Payload识别与可解释性分析

原文标题&#xff1a;Web Attack Payload Identification and Interpretability Analysis Based on Graph Convolutional Network 原文链接&#xff1a;https://ieeexplore.ieee.org/document/10076547/ 作者单位&#xff1a;四川大学网络安全学院 相似原理论文&#xff1…

字节码增强技术-ASM

概述 在Java中一般是用javac命令编译源代码为字节码文件&#xff0c;一个.java文件从编译到运行的示例如图所示: 使用字节码的好处&#xff1a;一处编译&#xff0c;到处运行。java 就是典型的使用字节码作为中间语言&#xff0c;在一个地方编译了源码&#xff0c;拿着.class …

TCP/IP模型五层协议

TCP/IP模型五层协议 认识协议 约定双方进行的一种约定 协议分层 降低了学习和维护的成本&#xff08;封装&#xff09;灵活的针对这里的某一层协议进行替换 四/五层协议 五层协议的作用 应用层 应用层常见协议 应用层常见协议概览 基于TCP的协议 HTTP&#xff08;超…

AI绘画的魅力与未来:人工智能如何重塑艺术创作

随着人工智能&#xff08;AI&#xff09;技术的不断进步&#xff0c;AI绘画已经成为艺术与技术交汇的新领域。通过深度学习、神经网络等先进技术&#xff0c;AI不仅能理解和模拟人类艺术家的创作风格&#xff0c;还能生成令人惊叹的原创艺术作品。本文旨在探讨AI绘画的现状、挑…

ChatGPT AIGC自动生成多条件复杂计算函数

在Excel中经常会遇到多条件判断,根据不同的条件与内容显示不同的值。 例如: 需要给每个员工根据入职年限,员工等级,满意度等维度给员工发年终奖。 这在职场办公过程中经常要面临的一个问题。如销售额达到多少,取多少提成,如学生成绩在什么区间是设置为优秀还是良好等一…

python 对图片增加边框,logo贴图,获取图片exif参数,填写图片文本内容

完整代码 # 找到个可以下载免费字体的网站https://font.chi删除我naz.com/mi删除我anfei.html from PIL import Image, ImageDraw, ImageFont import exifreaddef photo_exif(image_path):f open(image_path, rb)tags exifread.process_file(f)# 打印所有照片信息&#xff0…

2023CRM排行:深度对比16款CRM

客户关系管理系统&#xff08;CRM&#xff09;作为数字化转型的重要载体&#xff0c;选择一个优秀的CRM系统将为企业未来健康增长保障。市场上CRM软件众多&#xff0c;但很难分清哪个适合自己&#xff0c;最近赶在公司选型&#xff0c;我对市场所有软件进行了一个调研&#xff…

单点登录是什么?

单点登录&#xff08;Single Sign On, SSO&#xff09;是指在同一帐号平台下的多个应用系统中&#xff0c;用户只需登录一次&#xff0c;即可访问所有相互信任的应用系统。 单点登录的本质就是在多个应用系统中共享登录状态。如果用户的登录状态是记录在 Session 中的&#xff…

异或运算.

相同为0&#xff0c;不同为1。 1 ^ 10 0 ^ 00 1 ^ 01 0 ^ 11性质&#xff1a; 0 ^ N N N ^ N 0交换、结合 a ^ b b ^ a&#xff1b; (a ^ b) ^ c a ^ (b ^ c)&#xff1b; 因此异或全部的元素的结果就是那个只出现1次的元素。 实现两个值的交换&#xff0c;而不必使…

C的魅力在于指针

原有的adrv9025 代理框架很好用,在其原有的平台上做改进

Python特征分析重要性的常用方法

前言 特征重要性分析用于了解每个特征(变量或输入)对于做出预测的有用性或价值。目标是确定对模型输出影响最大的最重要的特征&#xff0c;它是机器学习中经常使用的一种方法。 为什么特征重要性分析很重要? 如果有一个包含数十个甚至数百个特征的数据集&#xff0c;每个特征…

C#冒泡排序算法

冒泡排序实现原理 冒泡排序是一种简单的排序算法&#xff0c;其原理如下&#xff1a; 从待排序的数组的第一个元素开始&#xff0c;依次比较相邻的两个元素。 如果前面的元素大于后面的元素&#xff08;升序排序&#xff09;&#xff0c;则交换这两个元素的位置&#xff0c;使…

汽车屏类产品(四):仪表Cluster

###前言 仪表Cluster/仪表盘Dashboard,作为伴随汽车诞生就存在的一个主要零部件之一,从机械到电子到数字,可以说也是逐渐发展到现在的。 目前的主流框图如下,中间processor就是主控芯片,可能有buttons/switches,有display显示屏+backlight背光,有audio->speake…

线性代数-Python-01:向量的基本运算 -手写Vector -学习numpy的基本用法

文章目录 代码目录结构Vector.py_globals.pymain_vector.pymain_numpy_vector.py 一、创建属于自己的向量1.1 在控制台测试__repr__和__str__方法1.2 创建实例测试代码 二、向量的基本运算2.1 加法2.2 数量乘法2.3 向量运算的基本性质2.4 零向量2.5 向量的长度2.6 单位向量2.7 …

mybatis自定义类型控制器(TypeHandler)处理将字符串处理为集合

1. 问题&#xff1a; 假设这么一个场景 localurl里面的值大概这样&#xff1a;dwad21.jpg,dwad22.jpg,dwad.23.jpg 是一个字符串 如果我在sql表中有一个字段&#xff08;local_url&#xff09;是本地图片资源的多个url字符串拼接值。我想在java后端中不进行额外的转换就取值加…

【Qt控件之微调框、进度条】QSpinBox、QDoubleSpinBox、QDial、QProgressBar介绍及使用

概述 QSpinBox类提供了一个微调框小部件。 QSpinBox适用于处理整数和离散的值集&#xff08;例如&#xff0c;月份名称&#xff09;&#xff1b;对于浮点数值&#xff0c;请使用QDoubleSpinBox。 QSpinBox允许用户通过点击上下按钮或按键盘上的上下箭头来增加/减少当前显示的值…

Hadoop3教程(二十三):Yarn的三大调度器

文章目录 &#xff08;129&#xff09;FIFO调度器&#xff08;130&#xff09;容量调度器特点资源分配算法 &#xff08;131&#xff09;公平调度器特点缺额的定义队列资源分配方式基于FIFO策略基于Fair策略资源分配算法 DRF策略 参考文献 &#xff08;129&#xff09;FIFO调度…