Java笔记-MinIO Java SDK的使用

news2024/9/20 7:26:02

此博文内容为:

  1. 使用SDK创建bucket;
  1. 使用SDK上传文件;
  1. 使用SDK下载文件。

maven添加:

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

首先使用Java SDK创建一个客户端实例:

MinioClient minioClient = MinioClient.builder()
        .endpoint("http://192.168.36.128:9000")
        .credentials("minioadmin", "minioadmin")
        .build();

随后创建一个bucket

minioClient.makeBucket(MakeBucketArgs
        .builder()
        .bucket("user1")
        .build());

上传文件:

FileInputStream fileInputStream = new FileInputStream("C:\\Users\\cff\\Desktop\\test.pdf");

ObjectWriteResponse writeResponse = minioClient.putObject(PutObjectArgs
        .builder()
        .bucket("user1")
        .object("test.pdf")
        .stream(fileInputStream, fileInputStream.available(), -1).build());

System.out.println("writeResponse : " + writeResponse.etag() + " " + writeResponse.versionId(

这里有一个要注意的地方:

        public PutObjectArgs.Builder stream(InputStream stream, long objectSize, long partSize) {
            this.validateNotNull(stream, "stream");
            long[] partinfo = this.getPartInfo(objectSize, partSize);
            long pSize = partinfo[0];
            int pCount = (int)partinfo[1];
            BufferedInputStream bis = stream instanceof BufferedInputStream ? (BufferedInputStream)stream : new BufferedInputStream(stream);
            return this.setStream(bis, objectSize, pSize, pCount);
        }

这个PutObjectArgs是上传接口partSize是分片,这里我填写的是-1。

下载文件:

try (InputStream stream =
             minioClient.getObject(GetObjectArgs
                     .builder()
                     .bucket("user1")
                     .object("test.pdf")
                     .build())) {
    // Read the stream
    saveFile(stream, "C:\\Users\\cff\\Desktop\\test2.pdf");
}catch (Exception e){
    e.printStackTrace();
}

完整代码如下:

package cn.minio.test;

import io.minio.*;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.*;


@SpringBootApplication
public class Main implements CommandLineRunner {

    public static void main(String[] args) {

        SpringApplication.run(Main.class, args);
    }

    void saveFile(InputStream inputStream, String saveFile){
        try (
             OutputStream outputStream = new FileOutputStream(saveFile)) {

            // 读取源文件数据并写入目标文件
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            System.out.println("文件保存成功!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public void run(String... args) throws Exception {

        MinioClient minioClient = MinioClient.builder()
                        .endpoint("http://192.168.36.128:9000")
                        .credentials("minioadmin", "minioadmin")
                        .build();

        minioClient.makeBucket(MakeBucketArgs
                .builder()
                .bucket("user1")
                .build());

        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\cff\\Desktop\\test.pdf");

        ObjectWriteResponse writeResponse = minioClient.putObject(PutObjectArgs
                .builder()
                .bucket("user1")
                .object("test.pdf")
                .stream(fileInputStream, fileInputStream.available(), -1).build());

        System.out.println("writeResponse : " + writeResponse.etag() + " " + writeResponse.versionId());

        try (InputStream stream =
                     minioClient.getObject(GetObjectArgs
                             .builder()
                             .bucket("user1")
                             .object("test.pdf")
                             .build())) {
            // Read the stream
            saveFile(stream, "C:\\Users\\cff\\Desktop\\test2.pdf");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

程序运行截图如下:

源码打包下载地址:

Java/MinIOTest at master · fengfanchen/Java · GitHub

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

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

相关文章

Linux使用Clash,clash-for-linux

文件下载 clash-for-linuxhttps://link.zhihu.com/?targethttps%3A//zywang.lanzn.com/ijE2a1m7h6mb&#xff08;百度和阿里云盘都不支持这个文件分享&#xff09;。 使用须知 - 此项目不提供任何订阅信息&#xff0c;请自行准备Clash订阅地址。 - 运行前请手动更改.env文件…

嵌入式开发—CAN通信协议详解与应用(中)

书接上回&#xff1a;嵌入式开发—CAN通信协议详解与应用&#xff08;上&#xff09; 文章目录 CAN通讯中的位时间和位同步位时间的构成采样点 位时间的计算公式时间量子&#xff08;Time Quantum, TQ&#xff09;位时间的阶段示意图位同步机制 CAN通信中的仲裁规则仲裁规则的…

03-Mac系统PyCharm主题设置

目录 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavior 4. 点击Appearance 5. 找到Theme进行设置 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavi…

【例题】lanqiao4425 咖啡馆订单系统

样例输入 3 2 2 1 3 1 2样例输出 3 2样例说明 输入的数组为&#xff1a;【3&#xff0c;1&#xff0c;2】 增量序列为&#xff1a;【2&#xff0c;1】 当增量 h2&#xff1a;对于每一个索引 i&#xff0c;我们会将数组元素 arr[i] 与 arr[i−h] 进行比较&#xff0c;并进行可…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器&#xff0c;属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格&#xff0c;生成各种各样类似效果的图片&#xff0c;就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片&#xff1a; 不输入任何提示词&#xff0c;出图…

MySQL数据库:掌握备份与恢复的艺术,确保数据安全无忧

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

波导阵列天线学习笔记 馈电网络1 使用X型全公共波导馈网的毫米波大规模天线阵列的带宽提升

摘要&#xff1a; 全公共波导馈网的一次反射等效模型被研究用于提出一种毫米波大规模天线阵列带宽提升的新方法。理论分析显示由馈电网络拓扑造成的指定频率的多级小反射的同相叠加现象是影响大规模阵列的可实现带宽的重要因素&#xff0c;除了包含阵列的独立功分器和反射器的带…

【Hot100】LeetCode—295. 数据流的中位数

目录 1- 思路题目识别堆实现 2- 实现⭐4. 寻找两个正序数组的中位数——题解思路 3- ACM 实现 原题链接&#xff1a;295. 数据流的中位数 1- 思路 题目识别 识别1 &#xff1a;实现一个数据结构&#xff0c;求中位数 堆实现 思路 利用优先队列&#xff0c;小根堆放较小的元…

专科医院内外网数据摆渡,什么方法最“对症下药”?

专科医院是专门从事某一个或少数几个医学分科的医院。这些医院在特定的医学领域内具有较高的专业性和技术水平&#xff0c;通常致力于某一类疾病的预防、诊断和治疗。如传染病医院、口腔医院、肿瘤医院等。 根据相关法律法规和行业标准&#xff0c;涉及医疗数据的网络必须采取必…

影刀RPA实战:网页爬虫之携程酒店数据

1.实战目标 大家对于携程并不陌生&#xff0c;我们出行定机票&#xff0c;住酒店&#xff0c;去旅游胜地游玩&#xff0c;都离不开这样一个综合性的网站为我们提供信息&#xff0c;同时&#xff0c;如果你也是做旅游的公司&#xff0c;那携程就是一个业界竞争对手&#xff0c;…

Zookeeper 3.8.4 安装和参数解析

安装 zookeeper 之前必须先安装 JDK&#xff0c;有关Linux环境JDK可以参考我以前写的博文 1、关于Linux服务器配置java环境遇到的问题 2、Linux环境安装openJDK 3、Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境 文章目录 1. zookeeper 安装2. 参数解析 1. zookeeper …

计算机视觉—3d点云数据基础

点云数据 3d点云数据由来 3d点云 3D Point Cloud是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中&#xff0c;它是一个包含多个三维坐标点&#xff08;X, Y, Z&#xff09;的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的&#xff0c;因此&a…

使用高版本nodej报错:node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found

如果要更新GLIBC_2.27会很繁琐&#xff0c;且耗时较长&#xff0c;所以建议下载带glibc的版本的nodejs 解决方案&#xff1a;下载带glibc的版本安装&#xff0c;如果是使用nvm则解压到对应的版本控制路径 我使用的版本是v20.16.0&#xff1a;Index of /download/release/v20.1…

基于GEE的Landsat 7ETM+条带填补

项目简介 该项目使用Google Earth Engine (GEE)平台&#xff0c;对Landsat 5和Landsat 7卫星影像进行预处理与影像填补操作。主要功能包括影像的选取、波段处理、缺失影像的填补以及最终影像的导出。代码中的核心功能是通过空间回归方法对Landsat 7和Landsat 5影像进行时序配准…

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…

YOLOv9改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

一、本文介绍 本文记录的是改进YOLOv9的损失函数&#xff0c;将其替换成Shape-IoU。现有边界框回归方法通常考虑GT&#xff08;Ground Truth&#xff09;框与预测框之间的几何关系&#xff0c;通过边界框的相对位置和形状计算损失&#xff0c;但忽略了边界框本身的形状和尺度等…

复习:指针

目录 指针变量 指针变量的内容 引入 指针变量的值 间接访问操作符 概念 运算 基本运算 指针/-整数 指针-指针 引入 算术运算和间接访问操作 自增自减运算符 前置 后置 应用 指针数组 语法 指针数组 数组指针 多级指针 引入 语法 章节问题 指针变量 指针…

Java数据结构(十一)——归并排序、计数排序

文章目录 归并排序算法介绍代码实现非递归实现复杂度和稳定性 计数排序算法介绍代码实现复杂度和稳定性 归并排序 算法介绍 归并排序是一种分而治之的排序算法。基本思想是&#xff1a; 将一个数组分成两半&#xff0c;对每半部分递归地应用归并排序先进行分解&#xff0c;然…

数据权限的设计与实现系列9——前端筛选器组件Everright-filter集成框架开发2

功能实现 ‍ 规则转换为 SQL 片段‍ 规则解析 首先我们来构造一个典型的规则&#xff0c;包括两个条件组&#xff0c;每个组由两个条件组成&#xff0c;由且与或两种逻辑关系&#xff0c;如下图&#xff1a; 然后看看生成的规则&#xff0c;如下&#xff1a; {"filt…

spring中对于servlet API的封装---springWeb

目录 一.springweb概述 二.springweb的特点 三.springweb的运行流程 四.springweb组件 五.springweb的搭建 1.导包 2.配置 DispatcherServlet 3.开启 springweb 注解 4.处理器的搭建 六.springweb注解 七.springweb拦截器 1.拦截器概述 2.拦截器的实现 (1)添加 servelt api 依赖…