C++使用minio-cpp(minio官方C++ SDK)与minio服务器交互简介

news2024/11/25 7:31:06

目录

  • minio简介
  • minio-cpp简介
  • minio-cpp使用

minio简介

minio是一个开源的高性能对象存储解决方案,完全兼容Amazon S3 API,支持分布式存储,适用于大规模数据架构,容易集成,而且可以方便的部署在集群中。

如果你已经部署了minio服务器,可以直接在浏览器中使用你的minio服务器URL比如http://IP:PORT形式登录你的minio服务器。

minio-cpp简介

minio-cpp是minio官方提供的C++ SDK,不仅能与minio服务交互,而且还可以和任何兼容Amazon S3 API的对象存储服务进行交互。

minio-cpp使用

来看一个简单示例,当然这只是一个demo,实际怎么获取库以及怎么使用库要根据需求考虑。

首先要获取到minio-cpp:

  • minio-cpp的源码可以在GitHub仓库中下载,你可以选择使用源码编译。
  • minio-cpp使用了vcpkg包管理器管理,所以你也可以直接使用vcpkg安装。

这里我们以使用vcpkg安装为例,首先执行命令vcpkg install minio-cpp安装(当然执行这条命令你需要先安装vcpkg),安装好了之后你会发现vcpkg的安装目录下多了minio-cpp及其依赖。

然后我们就可以写自己的解决方案了,我们来写一个简单的上传数据的demo,先看一下目录结构
在这里插入图片描述

结构很简单。

然后看一下main.cpp

#include <iostream>
#include <sstream>

#include "miniocpp/client.h"

int main()
{
    // 设置URL,可以填写域名形式或者IP:端口形式,默认是https,如果用http,即使在URL里指明了http也会有问题,需要给第二个参数传入false
    minio::s3::BaseUrl baseUrl("xxx");

    // 设置access_key和secret_key
    minio::creds::StaticProvider staticProvider("xxx", "xxx");

    minio::s3::Client client(baseUrl, &staticProvider);

    // 检查桶是否存在
    bool bBucketExists = false;
    {
        minio::s3::BucketExistsArgs bucketExistsArgs;
        bucketExistsArgs.bucket = "demo";

        minio::s3::BucketExistsResponse bucketExistsResponse = client.BucketExists(bucketExistsArgs);

        if (bucketExistsResponse)
        {
            // 请求正常
            bBucketExists = bucketExistsResponse.exist;
        }
        else
        {
            // 请求异常
            std::cout << bucketExistsResponse.Error().String() << std::endl;

            return -1;
        }
    }

    // 桶不存在则创建
    if (!bBucketExists)
    {
        minio::s3::MakeBucketArgs makeBucketArgs;
        makeBucketArgs.bucket = "demo";

        minio::s3::MakeBucketResponse makeBucketResponse = client.MakeBucket(makeBucketArgs);

        if (!makeBucketResponse)
        {
            // 创建异常
            std::cout << makeBucketResponse.Error().String() << std::endl;

            return -1;
        }
    }

    // 上传数据
    std::string strData = "demodata";
    std::istringstream issData(strData);

    minio::s3::PutObjectArgs putObjectArgs(issData, strData.size(), 0);
    putObjectArgs.bucket = "demo";
    putObjectArgs.object = "demo";

    minio::s3::PutObjectResponse putObjectResponse = client.PutObject(putObjectArgs);

    if (!putObjectResponse)
    {
        // 上传异常
        std::cout << putObjectResponse.Error().String() << std::endl;

        return -1;
    }

    return 0;
}

然后是CMakeLists.txt

cmake_minimum_required(VERSION 3.25)

project(demo)

find_package(miniocpp REQUIRED)

add_executable(demo main.cpp)

target_link_libraries(demo PRIVATE miniocpp::miniocpp)

target_compile_features(demo PUBLIC cxx_std_17)

编写完成之后我们可以执行命令cmake -B build -D CMAKE_PREFIX_PATH="程序包安装位置"生成构建系统(当然如果你已经配置好了相关内容,也可以不用指定程序包安装位置),然后执行命令cmake --build build生成可执行程序就可以了。

如果这篇文章对你有帮助,别忘了关注我啊,可能我还会写出更多对你有帮助的文章

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

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

相关文章

细说敏捷:敏捷四会之standup meeting

上一篇文章中&#xff0c;我们讨论了 敏捷四会 中 冲刺计划会 的实施要点&#xff0c;本篇我们继续分享敏捷四会中实施最频繁&#xff0c;团队最容易实施但往往也最容易走形的第二个会议&#xff1a;每日站会 关于每日站会的误区 站会是一个比较有标志性的仪式活动&#xff0…

二分法(折半法)查找【有动图】

二分法&#xff0c;也叫做折半法&#xff0c;就是一种通过有序表的中间元素与目标元素进行对比&#xff0c;根据大小关系排除一半元素&#xff0c;然后继续在剩余的一半中进行查找&#xff0c;重复这个过程直至找到目标值或者确定目标值不存在。 我们从结论往回推&#xff0c;…

FreeRTOS——低功耗管理

目录 一、概念及其应用 1.1应用 1.2STM32电源管理系统 2.3STM32低功耗模式 2.3.1睡眠模式 2.3.2停止模式 2.3.3待机模式 三、Tickless低功耗模式 3.1低功耗模式配置 3.2低功耗模式应用 3.3低功耗电路分析 3.4低功耗处理相关接口 四、实现原理 4.1任务等待删除的检查…

【STM32】MPU6050初始化常用寄存器说明及示例代码

一、MPU6050常用配置寄存器 1、电源管理寄存器1&#xff08; PWR_MGMT_1 &#xff09; 此寄存器允许用户配置电源模式和时钟源。 DEVICE_RESET &#xff1a;用于控制复位的比特位。设置为1时复位 MPU6050&#xff0c;内部寄存器恢复为默认值&#xff0c;复位结束…

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究

复杂场景下水下图像增强技术的研究 对于海洋勘探来说&#xff0c;清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而&#xff0c;在复杂的水下环境中&#xff0c;由于光在水中传播过程中的吸收、散射等现象&#xff0c;导致图像质量下降&#xff0c;导致模糊、…

自动驾驶3D目标检测综述(三)

前两篇综述阅读理解放在这啦&#xff0c;有需要自行前往观看&#xff1a; 第一篇&#xff1a;自动驾驶3D目标检测综述&#xff08;一&#xff09;_3d 目标检测-CSDN博客 第二篇&#xff1a;自动驾驶3D目标检测综述&#xff08;二&#xff09;_子流行稀疏卷积 gpu实现-CSDN博客…

【Linux | 计网】TCP协议详解:从定义到连接管理机制

目录 1.TCP协议的定义&#xff1a; 2.TCP 协议段格式 3.TCP两种通信方式 4.确认应答(ACK)机制 解决“后发先至”问题 5.超时重传机制 那么, 超时的时间如何确定? 6.连接管理机制&#xff1a; 6.1.三次握手&#xff1a; 为什么需要3次握手&#xff0c;一次两次不行吗…

Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图

用户打开 PDF 文档时&#xff0c;他们会看到 PDF 的初始视图。默认情况下&#xff0c;打开 PDF 时不会显示书签面板或缩略图面板。在本文中&#xff0c;我们将演示如何设置文档属性&#xff0c;以便每次启动文件时都会打开书签面板或缩略图面板。 Spire.PDF for .NET 是一款独…

2024年12月Gesp七级备考知识点拾遗第一期(图的定义及遍历)

目录 总序言 知识点拾遗​编辑 度数 环 二叉树 图的遍历 深度优先 广度优先 连通与强连通 有什么不同 构成分别至少需要几条边&#xff08;易错题&#xff09;&#xff1f; 无向连通图 有向强连通图 完全图 什么是完全图 无向完全图最少边数 有向完全图最少边…

Doris 的Explain 和 Profile

什么是 explain&#xff1f; 执行计划是对一条 SQL 具体的执行方式和执行过程的描述。例如&#xff0c;对于一个涉及两表连接的 SQL&#xff0c;执行计划会展示这两张表的访问方式信息、连接方式信息&#xff0c;以及各个操作之间的顺序。 在 Doris 系统中提供了 Explain 工具…

QT QVBoxLayout控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例&#xff0c;包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizonta…

对sklearn库中的鸢尾花数据集内容和结构的详解认识和load_iris()函数查找学习举例

对sklearn库中的鸢尾花数据集内容和结构的详解认识和load_iris()函数查找学习举例 对sklearn库中的鸢尾花数据集内容和结构的详解认识和load_iris函数查找学习举例 对sklearn库中的鸢尾花数据集内容和结构的详解认识和load_iris()函数查找学习举例一、鸢尾花数据位置二、鸢尾花…

动态反馈控制器(DFC)和 服务率控制器(SRC);服务率和到达率简单理解

目录 服务率和到达率简单理解 服务率 到达率 排队论中的应用 论文解析:队列等待成本动态感知控制模型 动态反馈和队列等待成本意识: 服务速率调整算法: 动态反馈控制器(DFC)和 服务率控制器(SRC) SRC公式4的原理 算力资源分配系统中的调整消耗 举例说明 服务…

微信小程序上传微信官方审核流程(1)

1&#xff0c;打开微信开发者工具 2&#xff0c;微信开发者工具右上角有一个上传按钮&#xff0c;点击上传按钮 3&#xff0c;点击完上传按钮会弹出一个上传成功的提示&#xff0c;点击提示框中的确定按钮 4&#xff0c;点击完确定按钮后会显示填写版本好和项目备注 5&#x…

优先算法 —— 双指针系列 - 复写零

目录 1. 复写零 2. 算法原理 一般情况下 改为就地操作&#xff1a;从左到右&#xff08;错误&#xff09; 从右到左 总结一下解决方法&#xff1a; 如何找到最后一个复写的数 特殊情况 完整步骤&#xff1a; 3. 代码 1. 复写零 题目链接&#xff1a;1089. 复写零 - 力…

Spring源码学习(一):Spring初始化入口

写在前面 ​   作为一个刚步入职场的小白&#xff0c;对Spring&#xff08;SpringBoot&#xff09;的了解只停留在会用&#xff0c;并未对其内部的原理有过学习。在公司导师的指导下&#xff0c;开始进一步学习Spring的源码&#xff0c;毕竟Spring源码是Spring全家桶的基础&…

IntelliJ+SpringBoot项目实战(十三)--在SpringBoot中整合Mybatis-plus

mybatis-plus是基于mybatis基础上的增强的持久层框架&#xff0c;也是目前Java项目开发的主流框架。本文介绍在SpringBoot中集成mybtais-plus的方法以及使用mybatis-plus开发增删改查模块。 一、引入mybatis-plus 在openjweb-core工程中引入mybatis-plus依赖: <dependency&…

Vector底层实现详解

一、vector的介绍 vector是表示可变大小数组的序列容器 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且…

【2024 Optimal Control 16-745】【Lecture4】equality-constraints.ipynb功能分析

代码实现了一个二次优化问题的可视化解法&#xff0c;包括目标函数、约束以及优化路径。提供了两种优化方法&#xff1a;牛顿法和高斯-牛顿法&#xff0c;用于对比效果。利用了自动微分工具 ForwardDiff 来计算约束曲率。 环境初始化并导入依赖库 # 激活当前文件夹下的项目环境…

【国产MCU】-GD32F470-串行外设接口(SPI)

串行外设接口(SPI) 文章目录 串行外设接口(SPI)1、SPI介绍1.1 SPI特性1.2 SPI信号1.3 SPI 时序和数据帧格式1.4 NSS 功能1.5 SPI运行模式2、SPI控制器寄存器列表3、SPI控制器驱动API介绍4、SPI应用4.1 SPI初始化流程4.2 数据发送与接收串行外设接口(Serial Peripheral Int…