C++ SDK
MinIO C++ SDK is Simple Storage Service (aka S3) client to perform bucket and object operations to any Amazon S3 compatible object storage service.
For a complete list of APIs and examples, please take a look at theMinIO C++ Client API Reference
MinIO C++ client SDK can be installed viavcpkg package manager:
$ vcpkg install minio-cppTypicallyminio-cpp will be part of dependencies specified invcpkg.json file:
{"$schema":"https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json","name":"your-project","version":"0.0.1","dependencies":[{"name":"minio-cpp"}]}MinIO C++ cliend SDK can be consumed as a dependency in CMakeLists.txt, the following can be used as an example:
cmake_minimum_required(VERSION3.10)project(miniocpp_exampleLANGUAGESCCXX)# This will try to find miniocpp package and all its dependencies.find_package(miniocppREQUIRED)# Create an executable called miniocpp-example:add_executable(miniocpp-exampleexample.cpp)# Link the executable to miniocpp and all its dependencies:target_link_libraries(miniocpp-examplePRIVATEminiocpp::miniocpp)# Make sure you are using at least C++17:target_compile_features(miniocpp-examplePUBLICcxx_std_17)Note thatminiocpp::miniocpp is a cmake imported target, which contains all the instructions necessary to useminio-cpp library from your cmake projet file.
In order to run minio-cpp tests and examples, you can do the following assumingVCPKG_ROOT points to a validvcpkg installation:
$ git clone https://github.com/minio/minio-cpp$cd minio-cpp$${VCPKG_ROOT}/vcpkg install$ cmake . -B build/Debug -DCMAKE_BUILD_TYPE=Debug -DMINIO_CPP_TEST=ON -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake$ cmake --build ./build/DebugNote that cmake also supports multi-configuration generators. Multi-configuration generators don’t useCMAKE_BUILD_TYPE during configure time. For example a Visual Studio project can be setup the following way:
$ git clone https://github.com/minio/minio-cpp$cd minio-cpp$${VCPKG_ROOT}/vcpkg install$ cmake . -B build -DMINIO_CPP_TEST=ON -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake$ cmake --build ./build --config DebugThe examples above assumed that you havevcpkg already installed and you have aVCPKG_ROOT environment variable set. This is common if you usevcpkg to handle dependencies of multiple projects as only a single installation ofvcpkg is required in that case. If you don’t havevcpkg installed and you only want to use it to testminio-cpp, it’s possible to install it locally like this:
$ git clone https://github.com/minio/minio-cpp$cd minio-cpp$ git clone https://github.com/microsoft/vcpkg.git$ ./vcpkg/bootstrap-vcpkg.sh$ ./vcpkg/vcpkg install$ cmake . -B ./build/Debug -DCMAKE_BUILD_TYPE=Debug -DMINIO_CPP_TEST=ON -DCMAKE_TOOLCHAIN_FILE=./vcpkg/scripts/buildsystems/vcpkg.cmake$ cmake --build ./build/DebugWe recommend the setup withVCPKG_ROOT for development. In that case there is aconfigure.sh script, that can be used to create both Debug and Release projects:
$ git clone https://github.com/minio/minio-cpp$cd minio-cpp$ ./configure.sh -DMINIO_CPP_TEST=ON#include<miniocpp/client.h>intmain(intargc,char*argv[]){// Create S3 base URL.minio::s3::BaseUrlbase_url("play.min.io");// Create credential provider.minio::creds::StaticProviderprovider("Q3AM3UQ867SPQQA43P2F","zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG");// Create S3 client.minio::s3::Clientclient(base_url,&provider);std::stringbucket_name="asiatrip";// Check 'asiatrip' bucket exist or not.boolexist;{minio::s3::BucketExistsArgsargs;args.bucket=bucket_name;minio::s3::BucketExistsResponseresp=client.BucketExists(args);if(!resp){std::cout<<"unable to do bucket existence check; "<<resp.Error()<<std::endl;returnEXIT_FAILURE;}exist=resp.exist;}// Make 'asiatrip' bucket if not exist.if(!exist){minio::s3::MakeBucketArgsargs;args.bucket=bucket_name;minio::s3::MakeBucketResponseresp=client.MakeBucket(args);if(!resp){std::cout<<"unable to create bucket; "<<resp.Error()<<std::endl;returnEXIT_FAILURE;}}// Upload '/home/user/Photos/asiaphotos.zip' as object name// 'asiaphotos-2015.zip' to bucket 'asiatrip'.minio::s3::UploadObjectArgsargs;args.bucket=bucket_name;args.object="asiaphotos-2015.zip";args.filename="/home/user/Photos/asiaphotos.zip";minio::s3::UploadObjectResponseresp=client.UploadObject(args);if(!resp){std::cout<<"unable to upload object; "<<resp.Error()<<std::endl;returnEXIT_FAILURE;}std::cout<<"'/home/user/Photos/asiaphotos.zip' is successfully uploaded as "<<"object 'asiaphotos-2015.zip' to bucket 'asiatrip'."<<std::endl;returnEXIT_SUCCESS;}This SDK is distributed under theApache License, Version 2.0, seeLICENSE for more information.