C++ minio怎么使用
时间: 2025-02-04 17:49:47 浏览: 39
### C++ 使用 MinIO 对象存储 示例教程
#### 初始化客户端配置
为了使用 MinIO 的对象存储服务,在初始化阶段需要创建 `S3Client` 实例并设置必要的参数,比如访问密钥、秘密密钥以及目标 MinIO 服务器的 URL。
```cpp
#include "s3_client.h"
// 创建 S3 客户端实例
std::shared_ptr<s3::client> client;
try {
s3::config cfg{
.access_key_id = "YOUR-ACCESSKEYID",
.secret_access_key = "YOUR-SECRETACCESSKEY",
.endpoint = "http://localhost:9000", // 替换成实际的服务地址
.region = "" // 如果是自托管MinIO可以留空
};
client.reset(new s3::client(cfg));
} catch (const std::exception& e) {
std::cerr << "Error initializing the client:" << e.what() << "\n";
}
```
#### 创建桶(Bucket)
通过调用 `put_bucket()` 方法来创建一个新的存储桶。这一步骤对于后续上传文件至关重要,因为所有的对象都必须存放在某个特定的桶内。
```cpp
bool createBucket(const char* bucketName){
try {
auto outcome = client->put_bucket(bucketName);
if (!outcome.is_success()) {
throw std::runtime_error(outcome.error().message());
}
return true;
} catch (const std::exception &e) {
std::cout << "Failed to create bucket '" << bucketName << "', error message: "
<< e.what();
return false;
}
}
```
#### 上载对象到指定桶中
利用 `put_object()` 函数能够轻松实现向已存在的桶里添加新对象的操作。这里展示了一个简单的例子,其中包含了基本的身份验证机制[^1]。
```cpp
void uploadFileToBucket(std::string_view filePath, const char *bucketName,
const char *objectKey) {
try {
std::ifstream fileStream(filePath.data(), std::ios_base::binary);
if(!fileStream.good()){
throw std::runtime_error("Could not open file");
}
auto result = client->put_object(bucketName, objectKey, fileStream);
if(result.status != 200){
throw std::runtime_error("Upload failed with status code "+std::to_string(result.status));
}
std::cout << "Successfully uploaded "<<filePath<<" as \""<<objectKey<<"\".\n";
}catch(const std::exception& ex){
std::cerr << "Exception during uploading :"<<ex.what()<<'\n';
}
}
```
#### 下载对象至本地路径
当需要获取远程存储的数据时,则可以通过 `get_object_to_file()` 来完成下载任务。此方法允许用户指定期望保存的目标位置,并自动处理整个传输过程中的细节问题[^3]。
```cpp
void downloadObjectToLocalPath(const char *bucketName, const char *objectKey,
std::string_view localFilePath) {
try {
auto res = client->get_object_to_file(bucketName, objectKey, localFilePath.data());
if(res.status!=200){
throw std::runtime_error("Download failed with status code"+std::to_string(res.status));
}
std::cout << "Successfully downloaded \"" << objectKey << "\" from bucket \""
<< bucketName << "\" and saved it locally at path:"
<< localFilePath << '\n';
} catch (const std::exception &excpt) {
std::cerr << excpt.what() << '\n';
}
}
```
阅读全文
相关推荐


















