Ubuntu云服务部署MiniO && AWS-SDK-CPP访问MiniO

1 篇文章 0 订阅
1 篇文章 0 订阅

Ubuntu云服务部署MiniO && AWS-SDK-CPP访问MiniO

Ubuntu云服务部署MiniO

1.腾讯云服务选择ubuntu对应版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IchiLTS873b40788a1484b9d1492a1942772a0.png)null)]
2.登录进入对应的云

#进入root
sudo -s
# 下载minio服务端
wget https://dl.min.io/server/minio/release/linux-amd64/minio
# 将下载所得minio文件拷贝到指定文件夹并赋权
sudo cp minio /usr/local/bin/
sudo chmod +x /usr/local/bin/minio

3.进入根节点为minio创建存储目录

#进入根节点
cd /
#创建minio存储目录
mkdir data

4.启动minio服务端

#设置minio API端口为9003,console端口为9001,若端口有占用情况需要更换端口号
minio server /data/minioData/ --address 0.0.0.0:9003 --console-address ":9001" >/data/minio.log 2>&1 &
#查看是否启动
ps -ef | grep minio

5.进入对应的网址
(1).进入云服务找到对应的公网IP
在这里插入图片描述
(2).访问http://公网IP:9001进入minio界面,账号:minioadmin 密码:minioadmin 为初始账号密码
在这里插入图片描述
(3).若出现访问被拒或者进不去上述界面需要配置云服务防火墙
在这里插入图片描述
6.配置Minio桶
(1).创建桶(buckets -> create bucket)
在这里插入图片描述
(2).设置桶访问权限为public(buckets -> demo -> Access Policy)
在这里插入图片描述
(3).设置桶的内存大小(buckets -> demo -> Quota)
在这里插入图片描述
(4).上传文件(Objetc browser -> demo ->upload)
在这里插入图片描述
(5).设置 access key(Access key -> create access key -> create) 记得保存key,它在创建后只显示这一次
在这里插入图片描述

AWS-SDK-CPP访问MiniO

1.下载aws-sdk-cpp

#拉取github aws-sdk-cpp 文件
git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp
#更新aws-sdk-cpp
cd aws-sdk-cpp
git checkout main
git pull origin main
git submodule update --init --recursive
#下载所有依赖项的捆绑包,并将其扩展到正确的位置
./prefetch_crt_dependency.sh

2.编译

#创建文件夹
mkdir build
cd build
#CMAKE_PREFIX_PATH 指定编译的aws-sdk-cpp路径 
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=./aws-sdk-cpp ..
#编译并按照默认安装aws-sdk-cpp
make && make install

3.Aws访问云服务部署的minio

#include <iostream>
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/core/auth/AWSCredentialsProvider.h>
#include <aws/s3/model/GetObjectRequest.h>
#include <aws/s3/model/PutObjectRequest.h>
#include <aws/s3/model/ListObjectsRequest.h>
#include <fstream>
#include <string>


Aws::S3::S3Client *s3_client=nullptr;
/// @brief 初始化获取S3client指针
void init()
{
    Aws::Client::ClientConfiguration config;
     config.endpointOverride = "公网IP:API端口";
    config.scheme = Aws::Http::Scheme::HTTP;
    config.verifySSL = false;
    //minioadmin可以替换成minio中申请的access key
    s3_client=new Aws::S3::S3Client(Aws::Auth::AWSCredentials("minioadmin", "minioadmin"), config,
                                Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
}
/// @brief 下载指定桶的指定文件
/// @param objectKey 指定文件
/// @param fromBucket 指定桶
/// @return 
bool downloadFile(const Aws::String &objectKey, const Aws::String &fromBucket)
{
    Aws::S3::Model::GetObjectRequest object_request;
    object_request.SetBucket(fromBucket);
    object_request.SetKey(objectKey);
    //等同
    // Aws::S3::Model::GetObjectRequest object_request;
	// object_request.WithBucket(fromBucket).WithKey(objectKey);

    Aws::S3::Model::GetObjectOutcome get_object_outcome = s3_client->GetObject(object_request);

    if (get_object_outcome.IsSuccess())
    {
		Aws::OFStream local_file;
        local_file.open(objectKey, std::ios::out | std::ios::binary);
        local_file << get_object_outcome.GetResultWithOwnership().GetBody().rdbuf();
        return true;
    } else {
        auto err = get_object_outcome.GetError();
        std::cout << "Error: GetObject: " << err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
        return false;
    }
}
/// @brief 获取桶名称和桶内名称
void GetObject()
{
    auto reponse=s3_client->ListBuckets();
    if(reponse.IsSuccess())
    {
        auto but=reponse.GetResult().GetBuckets();
        for (auto it=but.begin();it!=but.end();it++)
        {
            std::cout<<"Buckets:"<<it->GetName()<<std::endl;
            Aws::S3::Model::ListObjectsRequest request;
            request.WithBucket(it->GetName());
            auto object=s3_client->ListObjects(request);
            if (object.IsSuccess())
            {
                auto list_name=object.GetResult().GetContents();
                for (auto iter=list_name.begin();iter!=list_name.end();iter++)
                {
                    std::cout<<"Object:"<<iter->GetKey()<<std::endl;
                }
            }
        } 
    }
}
bool uploadFile()
{
    Aws::S3::Model::PutObjectRequest request;
    //这里指定桶和数据
    request.WithBucket("demo").WithKey("libchilkat-9.5.0.a");
    auto data=Aws::MakeShared<Aws::FStream>("PutObjectInputStream","/home/jinx/object/lib/libchilkat-9.5.0.a", std::ios_base::in | std::ios_base::binary);
    request.SetBody(data);
    auto putObjectResult = s3_client->PutObject(request);
	if (putObjectResult.IsSuccess())
	{
		std::cout << "Done!" << std::endl;
		return true;
	}
	else
	{
		std::cout << "Faild!" << std::endl;
		return false;
	}
}
int main(int, char **)
{
    Aws::SDKOptions options;
    Aws::InitAPI(options);
    {
        const Aws::String bucket_name = "demo";//已经有的桶名称
        const Aws::String object_name = "credentials.json";//已有的桶内文件的名称
        //初始化基本信息
        init();
        //文件上传到minio
        uploadFile();
        //查看所有的公共桶和桶内的文件
        GetObject();
        //下载桶内文件
        if (!downloadFile(object_name, bucket_name)) {
            return 1;
        }
        delete s3_client;
    }
    Aws::ShutdownAPI(options);
    return 0;
}

4.CMakeLists.txt信息

cmake_minimum_required(VERSION 3.8)
project(sota_curl)
find_package(Threads REQUIRED)
find_package(AWSSDK REQUIRED COMPONENTS s3)
add_executable(main src/minioDownload.cpp)
target_link_libraries(
  main
  ${AWSSDK_LINK_LIBRARIES}
  )
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值