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