Java使用minio上传下载文件

 这里我选用的JDK1.8

一、导入依赖

<dependency>
   <groupId>io.minio</groupId>
   <artifactId>minio</artifactId>
   <version>8.2.2</version>
</dependency>

二、导入工具类

注意:这个工具类所有上传的文件和下载的文件都是基于配置的 bucketName 这一个桶的文件,

        使用之前需要配置自己的 endpoint、bucketName、accessKey、secretKey

import io.minio.*;
import java.util.UUID;

public class FileUpload {
    
    // minio部署的地址
    private static String endpoint="http://192.168.31.208:5000";
    // 桶名
    private static String bucketName="minio-test";
    // access key
    private static String accessKey="minio-test";
    // secret key
    private static String secretKey="minio-test";

    /**
     *	本地上传
     * @param fileName 本地要上传的文件名
     */
    public static String upload(String fileName)throws Exception{
        // 1. 拿到minio客户端
        MinioClient minioClient= MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey,secretKey)
                .build();

        // 2. 判断bucket是否存在
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
        String minioFileName = UUID.randomUUID() +fileName.substring(fileName.lastIndexOf("."));
        try {
            minioClient.uploadObject(UploadObjectArgs.builder()
                    .object(minioFileName)
                    .filename(fileName)
                    .bucket(bucketName)
                    .build());
        }catch (Exception e){
            e.printStackTrace();
            System.out.println(fileName+" 上传失败");
            return null;
        }
        System.out.println(fileName+" 上传成功!");
        String url=endpoint+"/"+bucketName+"/"+minioFileName;
        return url;
    }
    
    /**
     * 	文件流上传	支持非本地上传
     * @param fileInputStream 要上传文件的输入流
     * @param minioFileName 推送到minio之后的名称
     * @return
     */
    public static String upload(InputStream fileInputStream, String minioFileName){
        // 1. 拿到minio客户端
        MinioClient minioClient= MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey,secretKey)
                .build();

        // 2. 判断bucket是否存在,若不存在,则创建bucket
        try {
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }
        }catch (Exception e) {
            e.printStackTrace();
        };

        // 3. 上传文件
        try {

            minioClient.putObject(PutObjectArgs.builder()
                            .object(minioFileName)
                            .bucket(bucketName)
                            .stream(fileInputStream, fileInputStream.available(), -1)
                    .build());
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("上传失败");
            return null;
        }
        String url=endpoint+"/"+bucketName+"/"+minioFileName;
        return url;
    }
    
    /**
     *		MultipartFile 文件上传 		支持非本地上传
     * @param multipartFile 要上传的文件
     * @param minioFileName 要上传到minio的文件名
     * @return
     */
    public static String upload(MultipartFile multipartFile, String minioFileName){
        String url=null;
        try {
            url = upload(multipartFile.getInputStream(),minioFileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return url;
    }
    
     /**
     *	MultipartFile 文件上传 		支持非本地上传
     * @param multipartFile 要上传的文件
     */
    public static String upload(MultipartFile multipartFile){
        String url=null;
        try {
            String minioFileName = UUID.randomUUID() + multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
            url = upload(multipartFile.getInputStream(),minioFileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return url;
    }
    
    /**
     *	下载到本地
     * @param downloadFileName 将要从minio的桶中下载的文件名
     * @param toLocalFileName   下载到当地的某个位置(带路径的文件全名)
     */
    public static void download(String downloadFileName,String toLocalFileName) {
        // 1.创建minio客户端
        MinioClient minioClient = MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey,secretKey)
                .build();

        // 2.判断桶是否存在
        try {
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
                System.out.println(bucketName+" 这个桶不存在!");
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 

        // 3.下载文件
        try {
            minioClient.downloadObject(DownloadObjectArgs.builder()
                    .bucket(bucketName).object(downloadFileName).filename(toLocalFileName)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("下载失败!");
        }
    }
}

三、在application.yml文件里添加配置

 上传视频时,有的视频内存过大,需要在配置文件中配置最大文件内存上限

spring:
  servlet:
    multipart:
      max-file-size: 100MB		# 文件的最大尺寸100MB
      max-request-size: 100MB	# 单次请求可以接收文件的最大尺寸为100MB,一般上传视频时会用到

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024第十五届蓝桥杯JavaB组省赛部分题目

目录 第三题 第四题 第五题 第六题 第七题 第八题 转载请声明出处&#xff0c;谢谢&#xff01; 填空题暂时可以移步另一篇文章&#xff1a;2024第十五届蓝桥杯 Java B组 填空题-CSDN博客 第三题 第四题 第五题 第六题 第七题 第八题 制作不易&#xff0c;还请点个赞支持…

钉钉OA审批评论接口,如何@ 人并发送通知

钉钉OA审批评论接口&#xff0c;如何 人并发送通 问题描述&#xff1a; 相关接口&#xff1a;https://oapi.dingtalk.com/topapi/process/instance/comment/add 我希望在钉钉oa审批流程中&#xff0c;添加评论的同时通过“”或者其他方式提醒流程发起人去跟进审批工作。 但我…

【算法一则】编辑距离 【动态规划】

题目 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a;输入&#xff1a;word1 "horse", word2 "…

一篇出色的答辩状,需要在“答”与“辩”两方面下功夫,你做到了吗?

一篇出色的答辩状&#xff0c;需要在“答”与“辩”两方面下功夫&#xff0c;你做到了吗&#xff1f; 在法律诉讼中&#xff0c;答辩状的重要性不言而喻。它不仅是你回应对方指控的主要手段&#xff0c;也是展示你立场和观点的关键平台。在#李秘书讲写作#看来&#xff0c;一篇…

AMEYA360 | 纳芯微发布首款1200V SiC MOSFET

纳芯微推出1200V首款SiC MOSFET NPC060N120A系列产品&#xff0c;该产品RDSon为60mΩ&#xff0c;具有通孔式TO-247-4L与表面贴装TO-263-7L两种封装形式&#xff0c;可提供车规与工规两种等级。 纳芯微的碳化硅MOSFET具有卓越的RDSon温度稳定性、门极驱动电压覆盖度更宽、具备高…

Spring AI ETL 流水线

先纠正 Spring AI 使用本地 Ollama Embeddings 中的一个错误&#xff0c;当启动 Ollama 之后&#xff0c;Windows会有托盘图标&#xff0c;此时已经启动了 Ollama 的服务&#xff0c;访问 Embedding 时不需要运行 ollama run gemma &#xff0c;只有访问 chat 时才需要启动一个…

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法&#xff0c;主要用于数据聚类。其工作原理基于迭代优化&#xff0c;将数据点划分为K个集群&#xff0c;使得每个数据点都属于最近的集群&#xff0c;并且每个集群的中心&#xff08;质心&#xff09;是所有属于该集群的数据点的平均值。以下是…

中文核心计算机视觉项目分享:多通道注意力机制得农业作物图像识别检测-完整代码+论文

创新点&#xff1a; 在苹果数据集中&#xff0c;存在遮挡、不同角度的拍摄、光照变化等问题&#xff0c;导致目标检测的性能下降。为了解决这些问题&#xff0c;提出智能感知优化网络和多路径特征融合网络。 智能感知优化网络&#xff1a;帮助模型更好地关注感兴趣的目标区域&…

电商技术揭秘二十七:跨境电商物流解决方案

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

C语言学习笔记之指针(二)

指针基础知识&#xff1a;C语言学习笔记之指针&#xff08;一&#xff09;-CSDN博客 目录 字符指针 代码分析 指针数组 数组指针 函数指针 代码分析&#xff08;出自《C陷阱和缺陷》&#xff09; 函数指针数组 指向函数指针数组的指针 回调函数 qsort() 字符指针 一…

试用模方时,系统一直提示“未找到有效配置文件” ,是需要安装3dsmax吗 ?

问题如图 把文件放在认证管理服务安装目录下即可。&#xff08;注&#xff1a;因平台限制&#xff0c;需要文件的直接后台私信即可哦&#xff09; 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件…

软考 - 系统架构设计师 - 数据架构真题

问题 1&#xff1a; (相当于根据题目中提到的 4 点&#xff0c;说一下关系型数据库的缺点) &#xff08;1&#xff09;.用户数量的剧增导致并发负载非常高&#xff0c;往往会达到每秒上万次读写请求。关系数据库应付每秒上万次的 SQL 查询还勉强可以&#xff0c;但是应付上万…

车载摄像头夜景增强技术解决方案,解锁高质量夜间视觉体验

随着汽车智能化的快速发展&#xff0c;车载摄像头已成为驾驶辅助系统的核心组件。尤其在夜间行驶时&#xff0c;摄像头所捕捉的画面质量直接关系到驾驶者的安全感知和行车决策。然而&#xff0c;传统的车载摄像头在夜间往往面临噪声多、画质差等挑战&#xff0c;难以满足用户对…

goland2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Goland 是一款由 JetBrains 公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于 Go 语言的开发。它提供了丰富的功能和工具&#xff0c;帮助开发者更高效地编写、调试和管理 Go 语言项目。 功能特点&#x…

什么是Rust语言?探索安全系统编程的未来

&#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来 文章目录 &#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来摘要引言正文&#x1f4d8; Rust语言简介&#x1f31f; 发展历程&#x1f3af; Rust的技术意义和优势&#x1f4e6; Rust解决的问题…

基于逐笔数据合成高频订单簿:DolphinDB 订单簿引擎

订单簿是交易市场上买卖双方正在报价的不同价格的列表。订单簿快照反应了特定时刻市场上的交易意图&#xff0c;比如交易活跃的证券标的往往有着密集的订单簿。订单簿快照对量化金融的交易策略、风险管理和市场分析等方面都具有重要意义。 通常交易所可以提供实时和历史的行情…

无界系统实战课:全体系落地无界改版后选择、出价、高投产做付费引流-38节

课程内容&#xff1a; 001.01、如何快速学习无界推广(新学员先听).mp4 002.02、如何快速上手和适应无界(老学员先听).mp4 003.03、无界推广在运营中的作用(必听).mp4 004.04、无界多工具如何选择(必听).mp4 005.05、自定义出价、控成本、最大化底层逻辑和选择(必听).mp4 …

postgres插件部署+函数开发 - pl/java安装(centos7)

一、安装postgres sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql11-server sudo /usr/pgsql-11/bin/postgresql-11-setup initdb sudo systemctl enable postg…

stable diffusion--小白学习步骤

1.看一下Unet网络的讲解_哔哩哔哩_bilibili&#xff0c;了解Unet网络 2.看一下【生成式AI】Diffusion Model 原理剖析 (1/4)_哔哩哔哩_bilibili&#xff0c;起码要看前3/6个视频 3.看一下超详细的扩散模型&#xff08;Diffusion Models&#xff09;原理代码 - 知乎 (zhihu.co…

前端-vue项目debugger调试

一、前言 有的时候接受同事一个项目&#xff0c;用框架不一样&#xff0c;写的也不太规范&#xff0c;那么就需要打断点去学习改项目的流程了。 那么vue项目是如何debugger调试呢&#xff1f; 二、操作 大概理解一下&#xff0c;vue项目启动&#xff0c;大概是先启动框架&am…
最新文章