安装AWS SDK

1、为您的平台安装 CMake、libcurl、libopenssl相关构建工具。确保这些在您的可执行路径中可用。

2、克隆源码

git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp

3、创建您的构建目录。将 <BUILD_DIR> 替换为您的构建目录名称:

cd <BUILD_DIR>

4、构建项目:

cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/usr/local/ -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_ONLY="s3"

make & make install

编写示例代码

1、导入必要头文件

#include <iostream> //用于标准输入输出。

#include <fstream> //用于文件输入输出。

#include <sys/stat.h> //用于检查文件状态。

#include <aws/core/Aws.h> //包含 AWS SDK for C++ 的核心功能。

#include <aws/s3/S3Client.h> //包含 Amazon S3 客户端类。

#include <aws/s3/model/PutObjectRequest.h> //包含用于将对象放入存储桶的请求类。



2、构建PutObject 函数:

//参数 bucketName 表示存储桶的名称,fileName 表示要上传的文件的名称,clientConfig 是 AWS 客户端配置。
bool PutObject(const Aws::String &bucketName,
                           const Aws::String &fileName,
                           const Aws::Client::ClientConfiguration &clientConfig) {
	//创建一个 S3 客户端对象 s3_client
    Aws::S3::S3Client s3_client(clientConfig);

	//创建一个 PutObjectRequest 对象 request
    Aws::S3::Model::PutObjectRequest request;

	//使用 request.SetBucket 和 request.SetKey 方法设置存储桶名称和对象键(即文件名)
    request.SetBucket(bucketName);
    request.SetKey(fileName);

	//使用 Aws::FStream 类创建一个指向要上传文件的输入流,并将其设置为请求体。
    std::shared_ptr<Aws::IOStream> inputData =
            Aws::MakeShared<Aws::FStream>("SampleAllocationTag",
                                          fileName.c_str(),
                                          std::ios_base::in | std::ios_base::binary);

    if (!*inputData) {
        std::cerr << "Error unable to read file " << fileName << std::endl;
        return false;
    }

    request.SetBody(inputData);

	//调用 s3_client.PutObject(request) 将对象上传到 S3 存储桶中
    Aws::S3::Model::PutObjectOutcome outcome =
            s3_client.PutObject(request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error: PutObject: " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
    else {
        std::cout << "Added object '" << fileName << "' to bucket '"
                  << bucketName << "'.\n";
    }

    return outcome.IsSuccess();
}

3、构建main函数:

int main() {
    Aws::SDKOptions options;
	//初始化 AWS SDK (Aws::InitAPI(options))
    Aws::InitAPI(options);
    {
        //要上传的存储桶名称 (bucket_name) 和文件名 (object_name)
        const Aws::String bucket_name = "bucket_name";
        const Aws::String object_name = "object_name";

		//创建一个 Aws::Client::ClientConfiguration 对象 clientConfig
        Aws::Client::ClientConfiguration clientConfig;
        //可选:设置为创建存储桶的 AWS 区域
        //clientConfig.region = "us-west-2";

		//调用 PutObject 函数将文件上传到 S3 存储桶中
        PutObject(bucket_name, object_name, clientConfig);
    }

	//关闭 SDK (Aws::ShutdownAPI(options))
    Aws::ShutdownAPI(options);

    return 0;
}

编译函数

将上述示例保存为upload.cpp

g++ upload.cpp -o upload -laws-cpp-sdk-core -laws-cpp-sdk-s3 -Wl,-rpath=/usr/local/lib

运行

1、配置环境变量

export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
export AWS_REGION=us-east-1 #具体区域

2、上传文件

./upload