Minio 文件上传(后端处理同文件判断,同一文件秒传)

news2025/1/17 0:54:42

记录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;

    @Bean
    public 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());
    }
@Test
    public  void upload() {
        //根据扩展名取出mimeType
        ContentInfo 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.coloradmin.cn/o/1104413.html

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

相关文章

openHarmony新建项目及本地模拟机配置

新建项目 新建项目 选择空模板 选择一个非中文路径 在新建项目过程中可能会存在杀毒软件报病毒信息&#xff0c;建议退出退出杀毒软件 直到右侧窗口出现 Previewer预览选项&#xff0c;证明项目搭建完成 相关常用文件及文件夹解析 实时预览 调整预览设备类型 …

CSS3 渐变

CSS3 渐变可以让你在两个或多个指定的颜色之间显示平稳的过渡。 CSS3渐变有两种类型&#xff1a;线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial Gradients&#xff09;。 线性渐变&#xff08;Linear Gradients&#xff09;&#xff1a; 线性…

数据抓取代码示例

以下是一个使用lua-http和Lua编写的爬虫程序&#xff0c;用于爬取内容。此程序使用了https://www.duoip.cn/get_proxy的代码。 -- 引入lua-http库 local http require "http" ​ -- 定义get\_proxy函数 local function get_proxy()-- 使用https://www.duoip.cn/get…

idea jrebel热部署插件免费激活

介绍 jrebel是一款热部署的插件 idea上原生是不支持热部署的&#xff0c;一般更新了 Java 文件后要手动重启 Tomcat 服务器&#xff0c;才能生效&#xff0c;我们可以使用jrebel来热部署。 安装jRebel 在plugin中&#xff0c;选中marketplace&#xff0c;搜索jrebel&#x…

Window 窗口函数 (Spark Sql)

在 Spark SQL 中&#xff0c;Window 函数是一种用于在查询结果集中执行聚合、排序和分析操作的强大工具。它允许你在查询中创建一个窗口&#xff0c;然后对窗口内的数据进行聚合计算。 import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions…

AnHookd Hook

1.Hook Hook译为“钩子”&#xff0c;就是在事件传送到终点前截获并监控事件的传输&#xff0c;像个钩子钩上事件一样&#xff0c;并且能够在钩上事件时处理一些自己特定的事件。 Android操作系统有一套自己的事件分发机制&#xff0c;所有的代码调用和回调都是按照一定顺序执…

MyBatis涉及的动态SQL

动态 SQL 提供了更大的灵活性和可重用性&#xff0c;可以根据不同情况生成不同的 SQL 语句&#xff0c;从而满足应用程序的需求。它简化了数据库操作的编写和管理&#xff0c;提高了开发效率和代码的可维护性。 <if> 用于条件判断&#xff0c;根据条件决定是否包含某个SQ…

9-k8s-亲和力与反亲和力

文章目录 一、概念二、实操节点亲和力1三、实操pod亲和力2 一、概念 节点亲和力概念&#xff08;反亲和力相反&#xff09; ps&#xff1a;官方文档http://kubernetes.p2hp.com/docs/concepts/scheduling-eviction/assign-pod-node.html 节点亲和力&#xff08;Node Affinity&a…

自媒体人搞钱的5个AI工具

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是第21篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完后可领取&#xff01;今天给大家分享一些基于个人创业需求场景&#xff0c;从产品设计图、网站搭建、logo设计、品牌设计&#xff0c;到图片…

CUDA学习笔记4——自定义设备函数

自定义设备函数 核函数&#xff1a;__global__修饰&#xff1b;在设备中执行&#xff1b;设备函数&#xff1a;__device__修饰&#xff1b;在设备中执行&#xff1b;只能被核函数或其他设备函数调用&#xff1b;主机函数&#xff1a;__host__修饰&#xff08;可省略&#xff0…

【数据挖掘】数据挖掘、关联分析、分类预测、决策树、聚类、类神经网络与罗吉斯回归

目录 一、简介二、关于数据挖掘的经典故事和案例2.1 正在影响中国管理的10大技术2.2 从数字中能够得到什么&#xff1f;2.3 一个网络流传的笑话(转述)2.4 啤酒与尿布2.5 网上书店关联销售的案例2.6 数据挖掘在企业中的应用2.7 交叉销售 三、数据挖掘入门3.1 什么激发了数据挖掘…

中文编程开发语言工具开发的实际软件案例:称重管理系统软件

中文编程开发语言工具开发的实际软件案例&#xff1a;称重管理系统软件 中文编程开发语言工具开发的实际软件案例&#xff1a;称重管理系统软件&#xff0c;软件可以安装在电脑上&#xff0c;也可以安装在收银机上&#xff0c;支持触摸和鼠标点&#xff0c;想学编程可以关注系统…

损失函数总结(二):L1Loss、MSELoss

损失函数总结&#xff08;二&#xff09;&#xff1a;L1Loss、MSELoss 1 引言2 损失函数2.1 L1Loss2.2 MSELoss 3 总结 1 引言 在上一篇博文中介绍了损失函数是什么以及为什么使用损失函数&#xff0c;从这一篇博文就开始关于损失函数有哪些进行进一步的介绍。这里放一张损失函…

电脑时间不准?简单几步教你恢复正常!

在日常使用电脑的过程中&#xff0c;我们经常依赖电脑的系统时间来同步文件、安排任务和进行各种在线活动。然而&#xff0c;有时候电脑的时间会不准确&#xff0c;这可能会导致一系列问题。本文将介绍三种常见的方法&#xff0c;帮助您解决电脑时间不准确的问题&#xff0c;确…

除氟树脂在工业、市政含氟废水处理中的应用

含氟废水的不达标排放对自然环境有很大的危害&#xff0c;氟化物离子可以累积在土壤和水体中&#xff0c;从而对生态系统造成破坏。大量的氟化物离子会对植物生长产生不良影响&#xff0c;并对水生生物造成毒性作用&#xff0c;严重时还可能导致生态灾难。氟化物离子如果没有得…

Linux内存管理 | 三、虚拟地址空间管理

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

解决微信小程序导入项目报错: [app.json文件内容错误]app.json未找到

目录 场景描述 原因分析 解决方法 场景描述 使用微信开发者工具导入项目后&#xff0c;打开控制台&#xff0c;出现报错提示&#xff1a;[app.json文件内容错误]app.json 未找到&#xff0c;如下图&#xff1a; 原因分析 一级文件目录里确实找不到app.json文件&#xff0c…

上市公司专利申请、创新绩效测算(2000-2022年)

参照王治等&#xff08;2022&#xff09;的做法&#xff0c;团队对上市公司-创新绩效进行测算。应用企业当年的专利申请数量&#xff08;Apply&#xff09;和企业当年的发明专利申请数量&#xff08;IApply&#xff09;衡量企业创新绩效 一、数据介绍 数据名称&#xff1a;上市…

如何处理前端路由懒加载?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

C++初阶--C++入门(1)

文章目录 C语言与C命名空间命名空间的定义和使用 C的输入输出缺省参数函数重载引用赋值与引用引用在参数上的使用以及注意事项函数返回值的引用引用与值的时间效率比较常引用 C语言与C 很多初学者都会把这两门语言进行混淆&#xff0c;但其实这是两种不同的语言&#xff0c;C相…