OssClient用于管理存储空间(Bucket)和文件(Object)等OSS资源。使用C++ SDK发起OSS请求时,您需要初始化一个OssClient实例,并根据需要修改ClientConfiguration的默认配置项。
新建OssClient
-
OssClient是线程安全的,允许多线程访问同一实例。您可以结合业务需求,复用同一个OssClient实例,也可以创建多个OssClient实例,分别使用。
-
InitializeSdk()和ShutdownSdk()是全局性接口,在程序生命周期内只需要调用一次。
您可以通过以下多种方式新建OSSClient。
使用OSS域名新建OSSClient
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
使用自定义域名新建OSSClient
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* yourEndpoint填写自定义域名。*/
std::string Endpoint = "yourEndpoint";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
conf.isCname = true;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
使用STS新建OSSClient
STS临时访问凭证包括临时访问密钥(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)。关于如何获取STS临时访问凭证的具体操作,请参见 使用STS临时访问凭证访问OSS 。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已通过环境变量设置临时访问密钥和安全令牌。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
配置OssClient
ClientConfiguration是OssClient的配置类,您可通过此配置类来配置代理、连接超时、最大连接数等参数。
通过OssClient可设置的参数如下:
参数 |
描述 |
isCname |
是否支持直接使用Cname作为Endpoint。默认不支持。 |
userAgent |
用户代理,指HTTP的User-Agent头。默认代理为aliyun-sdk-cpp/1.X.X。 |
maxConnections |
连接池数。默认为16个。 |
requestTimeoutMs |
请求超时时间。请求超时没有收到数据将会关闭连接,默认为10000ms。 |
connectTimeoutMs |
建立连接的超时时间。默认为5000ms。 |
retryStrategy |
自定义失败重试策略。 |
proxyScheme |
代理协议,默认为HTTP。 |
proxyPort |
代理服务器端口。 |
proxyPassword |
代理服务器验证的密码。 |
proxyUserName |
代理服务器验证的用户名。 |
verifySSL |
是否开启SSL证书校验,默认关闭。
说明
C++ SDK 1.8.2及以上版本默认开启SSL证书校验。 |
caPath |
用于设置CA证书根路径,当verifySSL为true时有效,默认为空。 |
caFile |
用于设置CA证书路径,当verifySSL为true时有效,默认为空。 |
enableCrc64 |
是否开启CRC64校验,默认开启。 |
enableDateSkewAdjustment |
是否开启HTTP请求时间自动修正,默认开启。 |
sendRateLimiter |
上传限速(单位KB/s)。 |
recvRateLimiter |
下载限速(单位KB/s)。 |
设置超时时间
以下代码用于设置超时时间:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
/* 设置连接池数,默认为16个。*/
conf.maxConnections = 20;
/* 设置请求超时时间,超时没有收到数据就关闭连接,默认为10000ms。*/
conf.requestTimeoutMs = 8000;
/* 设置建立连接的超时时间,默认为5000ms。*/
conf.connectTimeoutMs = 8000;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
设置SSL证书校验
C++ SDK 1.8.2及以上的版本默认自动开启SSL证书校验。如果出现SSL证书校验失败,您需要根据实际情况设置正确的证书路径,或者关闭SSL证书校验。
以下代码用于设置SSL证书校验:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
/* 设置SSL证书校验开关,默认为true,即开启证书校验。*/
conf.verifySSL = true;
/* 设置CA证书根路径,当verifySSL为true时有效,默认为空。*/
conf.caPath = "/etc/ssl/certs/";
/* 设置CA证书路径,当verifySSL为true时有效,默认为空。*/
conf.caFile = "/etc/ssl/certs/ca-certificates.crt";;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
设置限速处理
以下代码用于设置上传或下载限速:
#include <alibabacloud/oss/OssClient.h>
#include <alibabacloud/oss/client/RateLimiter.h>
using namespace AlibabaCloud::OSS;
class UserRateLimiter : public RateLimiter
public:
UserRateLimiter() : rate_(0) {};
~UserRateLimiter() {};
virtual void setRate(int rate) { rate_ = rate; };
virtual int Rate() const { return rate_; };
private:
int rate_;
int main(void)
/* 初始化OSS账号信息。*/
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。*/
std::string ObjectName = "exampledir/exampleobject.txt";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
auto sendrateLimiter = std::make_shared<UserRateLimiter>();
auto recvrateLimiter = std::make_shared<UserRateLimiter>();
conf.sendRateLimiter = sendrateLimiter;
conf.recvRateLimiter = recvrateLimiter;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 设置下载限速(单位KB/s)。*/
recvrateLimiter->setRate(256);
/* 设置上传限速(单位KB/s)。*/
sendrateLimiter->setRate(256);
/* 上传文件。yourLocalFilename填写本地文件完整路径。*/
auto outcome = client.PutObject(BucketName, ObjectName, "yourLocalFilename");
/* 上传过程中更新上传限速(单位KB/s)。*/
sendrateLimiter->setRate(300);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
设置重试策略
以下代码用于设置重试策略:
#include <alibabacloud/oss/OssClient.h>
#include <alibabacloud/oss/client/RetryStrategy.h>
using namespace AlibabaCloud::OSS;
class UserRetryStrategy : public RetryStrategy
public:
/* maxRetries表示最大重试次数,scaleFactor为重试等待时间的尺度因子。*/
UserRetryStrategy(long maxRetries = 3, long scaleFactor = 300) :
m_scaleFactor(scaleFactor), m_maxRetries(maxRetries)
/* 您可以自定义shouldRetry函数,该函数用于判断是否进行重试。*/
bool shouldRetry(const Error & error, long attemptedRetries) const;
/* 您可以自定义calcDelayTimeMs函数,该函数用于计算重试的延迟等待时间。*/
long calcDelayTimeMs(const Error & error, long attemptedRetries) const;
private:
long m_scaleFactor;
long m_maxRetries;
bool UserRetryStrategy::shouldRetry(const Error & error, long attemptedRetries) const
if (attemptedRetries >= m_maxRetries)
return false;
long responseCode = error.Status();
//http code
if ((responseCode == 403 && error.Message().find("RequestTimeTooSkewed") != std::string::npos) ||
(responseCode > 499 && responseCode < 599)) {
return true;
else {
switch (responseCode)
//curl error code
case (ERROR_CURL_BASE + 7): //CURLE_COULDNT_CONNECT
case (ERROR_CURL_BASE + 18): //CURLE_PARTIAL_FILE
case (ERROR_CURL_BASE + 23): //CURLE_WRITE_ERROR
case (ERROR_CURL_BASE + 28): //CURLE_OPERATION_TIMEDOUT
case (ERROR_CURL_BASE + 52): //CURLE_GOT_NOTHING
case (ERROR_CURL_BASE + 55): //CURLE_SEND_ERROR
case (ERROR_CURL_BASE + 56): //CURLE_RECV_ERROR
return true;
default:
break;
return false;
long UserRetryStrategy::calcDelayTimeMs(const Error & error, long attemptedRetries) const
return (1 << attemptedRetries) * m_scaleFactor;
int main(void)
/* 初始化OSS账号信息。*/
/*yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
/* 设置失败请求重试次数,默认为3次。*/
auto defaultRetryStrategy = std::make_shared<UserRetryStrategy>(5);
conf.retryStrategy = defaultRetryStrategy;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
设置代理服务器
以下代码用户设置代理服务器:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
/* 设置代理服务地址。*/
conf.proxyHost = "yourProxyHost";
/* 设置代理服务端口。*/
conf.proxyPort = 1234;
/* 设置代理服务器验证的用户名,可选。*/
conf.proxyUserName = "yourProxyUserName";
/* 设置代理服务器验证的密码,可选。*/
conf.proxyPassword = "yourProxyPassword";
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
GetBucket (ListObjects)
对象存储-初始化
下载到本地文件
对象存储-安装
-
本页导读 (1)