minio对于其他语言支持较好,java可以通过maven导入依赖,js可以通过npm下载依赖包,C++在官网也有了说明,貌似可以通过vcpkg install minio-cpp来实现,这种方法以后在使用Linux系统后,会尝试一下。
minio Linux SDK
由于当前系统为windows,打算在windows上,完成一个Qt操作minio的测试,查看资料后,minio支持亚马逊S3协议,大家都使用vcpkg下载aws-sdk-cpp,完成对minio的操作。
我也是首先安装了CMake,构建时报错,又安装了VS2015,后面发现vs版本过低,在安装亚马逊SDK时提示错误,又重新安装了VS2019。
下载vcpkg
clone vcpkg
https://github.com/microsoft/vcpkg.git
编译构建vcpkg
./bootstrap-vcpkg.bat
生成vcpkg.exe
下载亚马逊SDK
使用vcpkg下载亚马逊SDK,这里使用VS2015安装的话会报错Command failed: ninja/1.10.2-windows/ninja.exe -v什么什么的,后面换了VS2019后顺利安装成功。
./vcpkg.exe search aws-sdk-cpp
./vcpkg.exe install aws-sdk-cpp[s3]:x64-windows
./vcpkg.exe install aws-sdk-cpp[core]:x64-windows
这里有博主推荐使用PowerShell7,在github上下一个,安装
在vcpkg文件夹installed中会生成下载后的头文件和库
新建QT工程
新建一个widget的空工程,将编译好的文件夹全部拷贝到工程下即可
在pro中引用lib库和头文件
INCLUDEPATH += $$PWD/. $$PWD/x64-windows/include
DEPENDPATH += $$PWD/.
win32: LIBS += -L$$PWD/x64-windows/lib/ -laws-c-auth -laws-c-cal\
-laws-c-common -laws-c-compression -laws-c-event-stream -laws-checksums -laws-c-http -laws-c-io\
-laws-c-mqtt -laws-cpp-sdk-core -laws-crt-cpp -laws-c-s3 -laws-c-sdkutils -lzlib \
-laws-cpp-sdk-core\
-laws-cpp-sdk-dynamodb\
-laws-cpp-sdk-kinesis\
-laws-cpp-sdk-s3
INCLUDEPATH += $$PWD/x64-windows/lib
DEPENDPATH += $$PWD/x64-windows/lib
win32:!win32-g++: PRE_TARGETDEPS += $$PWD/x64-windows/lib/aws-c-auth.lib\
$$PWD/x64-windows/lib/aws-c-cal.lib\
$$PWD/x64-windows/lib/aws-c-common.lib\
$$PWD/x64-windows/lib/aws-c-compression.lib\
$$PWD/x64-windows/lib/aws-c-event-stream.lib\
$$PWD/x64-windows/lib/aws-checksums.lib\
$$PWD/x64-windows/lib/aws-c-http.lib\
$$PWD/x64-windows/lib/aws-c-io.lib\
$$PWD/x64-windows/lib/aws-c-mqtt.lib\
$$PWD/x64-windows/lib/aws-cpp-sdk-core.lib\
$$PWD/x64-windows/lib/aws-crt-cpp.lib\
$$PWD/x64-windows/lib/aws-c-s3.lib\
$$PWD/x64-windows/lib/aws-c-sdkutils.lib\
$$PWD/x64-windows/lib/fmt.lib\
$$PWD/x64-windows/lib/zlib.lib\
$$PWD/x64-windows/lib/aws-cpp-sdk-core.lib\
$$PWD/x64-windows/lib/aws-cpp-sdk-dynamodb.lib\
$$PWD/x64-windows/lib/aws-cpp-sdk-kinesis.lib\
$$PWD/x64-windows/lib/aws-cpp-sdk-s3.lib
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <fstream>
#include "aws\s3\S3Client.h"
#include "aws\core\Aws.h"
#include "aws\core\auth\AWSCredentialsProvider.h"
using namespace std;
using namespace Aws::S3;
using namespace Aws::S3::Model;
#include "aws/s3/model/PutObjectRequest.h"
#include "aws/s3/model/GetObjectRequest.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
// 初始化
Aws::SDKOptions options;
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Debug;
Aws::InitAPI(options);
Aws::Client::ClientConfiguration cfg;
cfg.endpointOverride = "127.0.0.1:9000";
cfg.scheme = Aws::Http::Scheme::HTTP;
cfg.verifySSL = false;
Aws::Auth::AWSCredentials cred("lisy", "12345678");
Aws::S3::S3Client client(cred, cfg, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Always, false,
Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::NOT_SET);
auto response = client.ListBuckets();
if (response.IsSuccess()) {
auto buckets = response.GetResult().GetBuckets();
for (auto iter = buckets.begin(); iter != buckets.end(); ++iter) {
cout << iter->GetName() << "\t" << iter->GetCreationDate().ToLocalTimeString(Aws::Utils::DateFormat::ISO_8601) << endl;
}
}
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
这里编译器选择MSVC
启动minio后,运行项目,能查到minio中的bucket