国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Windows下Qt使用AWS SDK for C++連接MinIO服務器

這篇具有很好參考價值的文章主要介紹了Windows下Qt使用AWS SDK for C++連接MinIO服務器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

MinIO——分布式對象存儲服務器。
它是一個是一個高性能的對象存儲服務器,用于構建云存儲解決方案,出于工作需求用到了這個MinIO來管理文件。

但,我用的是Qt,c++語言,并且使用環(huán)境是windows,可MinIO的C++ SDK只能Linux使用,不支持Windows,如果非要自己編譯Windows版本的話估計得踩不少坑,放過自己吧。

最后只能折中于使用AWS SDK for C++,好在MinIO是兼容AWS SDK的?

安裝vcpkg

先安裝AWS SDK for C++,需要先安裝vcpkg:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat

等安裝完成后,將vcpkg的環(huán)境加入系統(tǒng)環(huán)境變量,這樣才能在cmd窗口隨意使用vcpkg命令。
右鍵“我的電腦” >> 屬性 >> 高級系統(tǒng)設置 >> 環(huán)境變量 >> 系統(tǒng)變量>> path
雙擊“path”把vcpkg的環(huán)境加入其中。
qtaws,Qt,qt,c++添加完成后,一路點擊“確定”按鈕退出界面。

安裝AWS SDK for C++

按下win+R輸入cmd回車,打開窗口后,輸入以下命令:

vcpkg search aws-sdk-cpp
vcpkg install aws-sdk-cpp[s3]:x64-windows

這里可能會因為網(wǎng)絡問題下載包失敗,失敗后重來,總會成功的。
等成功安裝后,會在vcpkg中看到這樣一個路徑:D:\Soft\vcpkg\vcpkg\installed\x64-windows
這里面lib、include、bin文件夾中的內(nèi)容,就是我們需要的。

創(chuàng)建Qt項目

隨便創(chuàng)建一個qt項目,在pro文件中加入:

INCLUDEPATH += D:/Soft/vcpkg/vcpkg/installed/x64-windows/include
LIBS += -LD:/Soft/vcpkg/vcpkg/installed/x64-windows/lib -laws-cpp-sdk-core -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-cpp-sdk-dynamodb -laws-cpp-sdk-kinesis -laws-cpp-sdk-s3 -laws-crt-cpp

對接MinIO

使用aws-sdk-cpp的接口,連接MinIO服務器,要確保服務器已打開。
完成功能:連接服務器、創(chuàng)建Bucket、列出Buckets的名字、上傳文件、下載文件、刪除文件、刪除Bucket。

#include <QFile>
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/GetObjectRequest.h>
#include <aws/s3/model/PutObjectRequest.h>
#include <aws/s3/model/DeleteObjectRequest.h>
#include <aws/s3/model/CreateBucketRequest.h>
#include <aws/s3/model/DeleteBucketRequest.h>
#include <aws/core/auth/AWSCredentialsProviderChain.h>

void DemoQML::initMinIO()
{
    // 連接服務器
    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("hualongxunda", "hualongxunda");

    Aws::S3::S3Client client(cred, cfg, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Always, false,
    Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::NOT_SET);

    std::string fileName = "2104616062021073019firstpush_00004893_OK.bmp";
    std::string BucketName = "mybucket";


    // 創(chuàng)建Bucket
    Aws::S3::Model::CreateBucketRequest create_bucket_request;
    create_bucket_request.SetBucket(BucketName);
    create_bucket_request.SetCreateBucketConfiguration({});
    auto create_bucket_outcome = client.CreateBucket(create_bucket_request);
    if (create_bucket_outcome.IsSuccess()) {
        qDebug() << "Bucket created successfully.";
    } else {
        qDebug() << "Failed to create bucket: " <<
                    create_bucket_outcome.GetError().GetMessage().c_str();
        Aws::ShutdownAPI(options);
        return;
    }


    // 列出Buckets的名字
    auto response = client.ListBuckets();
    if (response.IsSuccess()) {
        auto buckets = response.GetResult().GetBuckets();
        for (auto iter = buckets.begin(); iter != buckets.end(); ++iter) {
            qDebug() << "--" << iter->GetName().c_str()
                     << iter->GetCreationDate().ToLocalTimeString(Aws::Utils::DateFormat::ISO_8601).c_str();
        }
    }


    // 上傳文件
    QFile file(QString::fromStdString(fileName));
    file.open(QIODevice::ReadOnly);
    Aws::S3::Model::PutObjectRequest putObjectRequest;
    putObjectRequest.WithBucket(BucketName.c_str()).WithKey(fileName.c_str());
    std::shared_ptr<Aws::IOStream> input_data = Aws::MakeShared<Aws::StringStream>("PutObjectInputStream");
    *input_data << file.readAll().toStdString();
    file.close();
    putObjectRequest.SetBody(input_data);
    auto putObjectResult = client.PutObject(putObjectRequest);
    if (putObjectResult.IsSuccess())
    {
        qDebug() << "upload file success!";
    }
    else
    {
        qDebug() << "upload file error: " <<
                     putObjectResult.GetError().GetExceptionName().c_str() << " " <<
                     putObjectResult.GetError().GetMessage().c_str();
        Aws::ShutdownAPI(options);
        return;
    }


    // 下載文件
    Aws::S3::Model::GetObjectRequest object_request;
    object_request.WithBucket(BucketName.c_str()).WithKey(fileName.c_str());
    auto get_object_outcome = client.GetObject(object_request);
    if (get_object_outcome.IsSuccess())
    {
        Aws::IOStream &local_file = get_object_outcome.GetResult().GetBody();
        if (!local_file) {
            qDebug() << "Error opening file";
            Aws::ShutdownAPI(options);
            return;
        }
        std::istreambuf_iterator<char> begin(local_file);
        std::istreambuf_iterator<char> end;
        std::string buffer(begin, end); // 讀取整個文件內(nèi)容
        QFile file_(QString::fromStdString("./test/"+fileName));
        if(file_.open(QIODevice::ReadWrite | QIODevice::Truncate)){
            file_.write(QByteArray::fromStdString(buffer));
            file_.close();
        }
        qDebug() << "download success!";
    }
    else
    {
        std::cout << "GetObject error: " <<
                     get_object_outcome.GetError().GetExceptionName() << " " <<
                     get_object_outcome.GetError().GetMessage() << std::endl;
    }


    // 刪除文件
    Aws::S3::Model::DeleteObjectRequest delete_object_request;
    delete_object_request.WithBucket(BucketName.c_str()).WithKey(fileName.c_str());
    auto delete_object_outcome = client.DeleteObject(delete_object_request);
    if (delete_object_outcome.IsSuccess()) {
        qDebug() << "File deleted successfully.";
    } else {
        qDebug() << "Failed to delete file: " <<
                    delete_object_outcome.GetError().GetMessage().c_str();
    }


    // 刪除Bucket,一定要先刪除文件,再刪除Bucket
    Aws::S3::Model::DeleteBucketRequest delete_bucket_request;
    delete_bucket_request.SetBucket(BucketName.c_str());
    auto delete_bucket_outcome = client.DeleteBucket(delete_bucket_request);
    if (delete_bucket_outcome.IsSuccess()) {
        qDebug() << "Bucket deleted successfully.";
    } else {
        qDebug() << "Failed to delete bucket: " <<
                    delete_bucket_outcome.GetError().GetMessage().c_str();
    }


    Aws::ShutdownAPI(options);
}

運行

編譯release版本后,如果運行失敗,可以將D:\Soft\vcpkg\vcpkg\installed\x64-windows\bin 目錄下有用到的dll文件,復制到qt程序的exe同級目錄下。
qtaws,Qt,qt,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-787530.html

到了這里,關于Windows下Qt使用AWS SDK for C++連接MinIO服務器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Baumer工業(yè)相機堡盟相機如何使用NEOAPI SDK實現(xiàn)相機的連接(C++)

    Baumer工業(yè)相機堡盟相機如何使用NEOAPI SDK實現(xiàn)相機的連接(C++)

    ? Baumer工業(yè)相機堡盟相機是一種高性能、高質量的工業(yè)相機,可用于各種應用場景,如物體檢測、計數(shù)和識別、運動分析和圖像處理。 Baumer的萬兆網(wǎng)相機擁有出色的圖像處理性能,可以實時傳輸高分辨率圖像。此外,該相機還具有快速數(shù)據(jù)傳輸、低功耗、易于集成以及高度

    2024年02月03日
    瀏覽(25)
  • 解決windows11下SSH不能連接遠端服務器-Permission denied (publickey)-Permissions for ‘xxx‘ are too open-管道不存在等問題

    解決windows11下SSH不能連接遠端服務器-Permission denied (publickey)-Permissions for ‘xxx‘ are too open-管道不存在等問題

    按照下面的步驟做一遍。我也搞不清哪些解決方式和哪些問題對應,多試一試就好了。 HostName和User換成對應的名字。 IdentityFile換成對應的密匙文件。 在搜索欄搜索服務: 確認電腦上有這兩個服務: 狀態(tài)和我上面設置的一樣。(記得更改運行狀態(tài)。我設置成正在啟動/自動延

    2024年02月04日
    瀏覽(63)
  • windows系統(tǒng)部署minio,以及添加到系統(tǒng)服務器

    windows系統(tǒng)部署minio,以及添加到系統(tǒng)服務器

    最近想配置一款可以存儲文件的服務器,如果使用阿里云OSS、七牛云、騰訊云需要收取比較高的費用,為了節(jié)約成本,考慮使用免費開源的軟件進行部署,然后對fastDFS和MiniO進行了對比: fastDFS分布式服務部署完成,需要具備以下的知識: linux基礎的目錄操作 常用的分布式主

    2024年02月02日
    瀏覽(26)
  • 【minio】Ubuntu安裝MinIO文件服務器并通過C++上傳下載

    【minio】Ubuntu安裝MinIO文件服務器并通過C++上傳下載

    ?? ★,° :.☆( ̄▽ ̄)/$: .°★ ?? 這篇文章主要介紹MinIO的使用。 學其所用,用其所學?!簡⒊?歡迎來到我的博客,一起學習知識,共同進步。 喜歡的朋友可以關注一下,下次更新不迷路?? MinIO是一種高性能、可擴展的 對象存儲服務 ,它可以在私有云、公共云和邊緣計

    2024年02月08日
    瀏覽(32)
  • ComPDFKit PDF SDK for Windows Crack

    ComPDFKit PDF SDK for Windows Crack

    添加了在創(chuàng)建文本框時調(diào)整默認屬性的支持。 增加了對調(diào)整PDF大小時調(diào)整寬度的支持。 添加了對編輯文本時更多快捷方式的支持。 優(yōu)化了文本輸入,并將字體樣式與原始文本相匹配。 在內(nèi)容編輯器模式下復制和粘貼時優(yōu)化了UI交互。 ComPDFKit PDF SDK允許開發(fā)人員在Windows(iOS和

    2024年02月12日
    瀏覽(24)
  • ComPDFKit Conversion SDK for Windows Crack

    ComPDFKit Conversion SDK for Windows Crack

    High-fidelity PDF conversion to MS Office, HTML, Text, CSV, RTF, Images, and more. ComPDFKit Conversion SDK can be used to convert PDF to Word, PDF to Excel and PDF to PPT. It uses native conversion without any server-side dependencies such as Microsoft Office or LibreOffice, which ensures the security of private information. ComPDFKit Conversion SDK provide

    2024年02月09日
    瀏覽(18)
  • 在QT中使用多線程并發(fā)服務器(C++)

    在QT中使用多線程并發(fā)服務器(C++)

    什么是多線程并發(fā)服務器?在QT里如何使用多線程并發(fā)服務器呢? 多線程并發(fā)服務器是一種網(wǎng)絡服務器設計,它能夠同時處理多個客戶端的請求。在多線程服務器中,主線程負責監(jiān)聽和接受來自客戶端的連接請求,每當有一個新的連接請求到來時,服務器就會創(chuàng)建一個新的線

    2024年04月11日
    瀏覽(21)
  • 通過FinalShell連接AWS的EC2服務器

    通過FinalShell連接AWS的EC2服務器

    今天通過AWS的EC2服務器,搭建了一下ChatGPT的服務,體驗了一把,通過FinalShell連接AWS的EC2服務器遇到了一個問題,記錄一下。 小插曲 :(ChatGPT的服務后續(xù)將集成到“ 韭盾 ”公眾號合“ 安前碼后 ”公眾號,一個是賺錢的號,一個是提升技術的號,可以體驗一把) 第一次在

    2024年02月04日
    瀏覽(20)
  • 使用 Qt for Android 獲取并利用手機傳感器數(shù)據(jù)(下篇)使用C++實現(xiàn)功能

    使用 Qt for Android 獲取并利用手機傳感器數(shù)據(jù)(下篇)使用C++實現(xiàn)功能

    在上一篇,我們搭建了開發(fā)環(huán)境。本篇,使用C++代碼真正實現(xiàn)功能。我們使用UDP協(xié)議從手機上指定發(fā)送的目的地、端口。效果如下圖,完整工程參考https://gitcode.net/coloreaglestdio/qtcpp_demo/-/tree/master/android/sensors2pc: 移動端1 移動端2 桌面 我們建立一個Qt的Widgets程序,添加 positio

    2024年02月13日
    瀏覽(18)
  • 使用 AWS Go SDK 讀取審計日志(CloudTrail)

    公司的海外業(yè)務需要將云上的操作讀取到內(nèi)部的日志文件中,永久保存,供內(nèi)部審計使用。 由于之前沒有用過AWS相關的SDK,在使用過程中也遇到一些困難,這里記錄一下,并且總結一下過程。 快速開始 代碼參考地址:https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/example_cod

    2024年02月05日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包