C++ uygulamalarınızdan Alibaba Cloud OSS içindeki nesneleri yüklemek, indirmek ve yönetmek için OSS C++ SDK V2'yi kullanın. Yüksek performanslı senaryolar, gömülü sistemler ve masaüstü uygulamaları için tasarlanmıştır.
OSS C++ SDK V2 önizleme aşamasındadır. Arayüzlerde değişiklikler olabilir. Güncellemeler için GitHub deposundaki sürüm notlarını kontrol edin.
Hızlı başlangıç
SDK'yı kurmak, kimlik bilgilerini yapılandırmak ve bir istemciyi başlatmak için aşağıdaki adımları tamamlayın.
Ön koşullar
C++17 veya üzeri bir derleyici (GCC 7+, Clang 5+ veya MSVC 2017+).
CMake 3,15 veya üzeri.
CMake sürümünüzü kontrol etmek için cmake --version komutunu çalıştırın. CMake yüklü değilse veya sürüm 3,15'ten önceyse CMake'i indirip kurun .
SDK'yı yükleme
Önerilen kurulum yöntemi vcpkg'dir.
vcpkg
SDK'yı yüklemek için vcpkg paket yöneticisini kullanın:
vcpkg install alibabacloud-oss-cpp-sdk-v2[curl]
# On Windows, you can use WinHTTP as the HTTP transport layer instead.
vcpkg install alibabacloud-oss-cpp-sdk-v2[winhttp]
Bir overlay port kullanarak kaynak koddan da kurulum yapabilirsiniz:
git clone https://github.com/aliyun/alibabacloud-oss-cpp-sdk-v2.git
vcpkg install alibabacloud-oss-cpp-sdk-v2[curl] --overlay-ports=alibabacloud-oss-cpp-sdk-v2/vcpkg --head
Varsayılan olarak hiçbiri etkinleştirilmediğinden bir HTTP aktarım katmanı (curl veya winhttp) belirtmeniz gerekir. Her ikisini de etkinleştirebilirsiniz.
Hem openssl hem de mbedtls etkinleştirilmişse openssl önceliklidir.
İsteğe bağlı özellikler:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tam tanımlamalar: vcpkg/vcpkg.json.
Kaynak kodu
OSS C++ SDK V2'nin en son sürümünü GitHub üzerinden indirin ve CMake ile derleyip kurun:
git clone https://github.com/aliyun/alibabacloud-oss-cpp-sdk-v2.git
cd alibabacloud-oss-cpp-sdk-v2
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build . --target install
Kullanılabilir CMake seçenekleri:
|
Seçenek |
Açıklama |
|
|
SDK'yı paylaşılan bir kitaplık olarak derler. Varsayılan olarak statik bir kitaplık derlenir (OFF). |
|
|
HTTP aktarım katmanı olarak libcurl kullanır. |
|
|
HTTP aktarım katmanı olarak WinHTTP kullanır (yalnızca Windows). |
|
|
SDK ile birlikte gelen sürüm yerine sisteme yüklü libcurl kitaplığını kullanır. |
|
|
Sisteme yüklü OpenSSL kitaplığını kullanır. |
|
|
Sisteme yüklü mbedTLS kitaplığını kullanır. |
|
|
Sisteme yüklü tinyxml2 kitaplığını kullanır. |
|
|
C++23 standardındaki |
|
|
İstemci tarafı şifrelemeyi etkinleştirir. |
|
|
Çalışma zamanı türü bilgisini (RTTI) etkinleştirir. |
Projenizin CMakeLists.txt dosyasına bağımlılığı ekleyin:
cmake_minimum_required(VERSION 3.15)
project(my-app)
find_package(alibabacloud_oss_v2 REQUIRED)
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE alibabacloud_oss_v2::oss)
Erişim kimlik bilgilerini yapılandırma
RAM kullanıcınızın AccessKey çiftini ortam değişkenleri olarak ayarlayın.
RAM konsolu nda bir RAM kullanıcısı oluşturun ve kalıcı bir AccessKey oluşturun . AccessKey'i kaydedin ve kullanıcıya AliyunOSSFullAccess iznini atayın.
Linux
-
Komut satırı arayüzünde ortam değişkenlerini
~/.bashrcdosyanıza eklemek için aşağıdaki komutları çalıştırın.echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc-
Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.
source ~/.bashrc -
Ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
-
macOS
-
Terminalde varsayılan kabuğunuzu kontrol etmek için aşağıdaki komutu çalıştırın.
echo $SHELL-
Aşağıdaki adımlar varsayılan kabuğunuza bağlıdır.
Zsh
-
Ortam değişkenlerini
~/.zshrcdosyanıza eklemek için aşağıdaki komutları çalıştırın.echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.
source ~/.zshrc -
Ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
-
Ortam değişkenlerini
~/.bash_profiledosyanıza eklemek için aşağıdaki komutları çalıştırın.echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile -
Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.
source ~/.bash_profile -
Ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
-
-
Windows
Command Prompt
-
Command Prompt (CMD) içinde aşağıdaki komutları çalıştırın:
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" -
Command Prompt'u yeniden açın ve ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
-
PowerShell'de aşağıdaki komutları çalıştırın.
[System.Environment]::SetEnvironmentVariable('OSS_ACCESS_KEY_ID', 'YOUR_ACCESS_KEY_ID', [System.EnvironmentVariableTarget]::User) [System.Environment]::SetEnvironmentVariable('OSS_ACCESS_KEY_SECRET', 'YOUR_ACCESS_KEY_SECRET', [System.EnvironmentVariableTarget]::User) -
PowerShell'i yeniden açın ve ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
[System.Environment]::GetEnvironmentVariable('OSS_ACCESS_KEY_ID', [System.EnvironmentVariableTarget]::User) [System.Environment]::GetEnvironmentVariable('OSS_ACCESS_KEY_SECRET', [System.EnvironmentVariableTarget]::User)
İstemciyi başlatma
SDK üç istek modunu destekler: OSSClient (senkron), OSSClient (asenkron) (iş parçacığı havuzu tabanlı) ve OSSAsyncClient (asenkron) (yerel async). Aşağıdaki örneklerde her bir mod ListBuckets işlemiyle gösterilmiştir.
OSSClient (senkron)
Bir işlemin tamamlanmasını beklemeniz gerektiğinde OSSClient senkron modunu kullanın.
Örnek kodu çalıştırmadan önce<region-id>ifadesini gerçek bir bölge ve uç nokta ile değiştirin; örneğinap-southeast-1.
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
auto outcome = client.listBuckets(
oss::models::ListBucketsRequest());
if (!outcome.has_value()) {
auto& err = outcome.error();
std::cerr << "Error Code: " << err.getCode() << std::endl;
std::cerr << "Error Message: " << err.getMessage() << std::endl;
std::cerr << "Request ID: " << err.getRequestId() << std::endl;
return 1;
}
auto& result = outcome.value();
for (auto& bucket : result.getBuckets()) {
std::cout << "bucket: name:" << bucket.name
<< ", region:" << bucket.region
<< ", storageClass:" << bucket.storageClass
<< std::endl;
}
return 0;
}
OSSClient (asenkron)
Bu iş parçacığı havuzu tabanlı asenkron mod yine OSSClient kullanır. conf.executor (bir iş parçacığı havuzu) ayarlandıktan sonra, senkron bir isteği eşzamanlı yürütme için iş parçacığı havuzuna göndermek üzere asyncCall() yöntemini çağırırsınız. Çağrı bir std::future döndürür ve çağıran sonuç için get() ile bekler.
conf.executorayarlanmazsaasyncCall()yöntemi birNoExecutorhatası döndürür.
#include <future>
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
#include "alibabacloud/oss2/utils/DefaultExecutor.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
// Key: Configure a thread pool to enable asyncCall() support for OSSClient.
conf.executor = std::make_shared<oss::DefaultExecutor>();
oss::OSSClient client(conf);
// Asynchronous call that returns a std::future.
auto future = client.asyncCall(oss::models::ListBucketsRequest());
// Wait for the result by using get() (future pattern).
auto outcome = future.get();
if (!outcome.has_value()) {
auto& err = outcome.error();
std::cerr << "Error Code: " << err.getCode() << std::endl;
std::cerr << "Error Message: " << err.getMessage() << std::endl;
return 1;
}
auto& result = outcome.value();
for (auto& bucket : result.getBuckets()) {
std::cout << "bucket: name:" << bucket.name
<< ", region:" << bucket.region << std::endl;
}
return 0;
}
Eşzamanlı yükleme ve indirme örnekleri: AsyncCallOnSyncClient.cpp ve AsyncCallbackOnSyncClient.cpp.
OSSAsyncClient (asenkron)
Bu yerel asenkron mod OSSAsyncClient kullanır. Her işlem için karşılık gelen bir operationNameAsync() yöntemi bulunur ve sonuç bir geri arama aracılığıyla alınır; bu sayede iş parçacığı havuzu yapılandırmaya gerek kalmaz. Bu mod, yüksek hacimli eşzamanlı işlemler gerektiren senaryolar için idealdir.
Örnek kodu çalıştırmadan önce<region-id>ifadesini gerçek bir bölge ve uç nokta ile değiştirin; örneğinap-southeast-1.
#include <iostream>
#include <thread>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSAsyncClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
auto client = std::make_shared<oss::OSSAsyncClient>(conf);
client->listBucketsAsync(
oss::models::ListBucketsRequest(),
oss::ListBucketsAsyncCallback([](oss::ListBucketsOutcome outcome) {
if (!outcome.has_value()) {
auto& err = outcome.error();
std::cerr << "Error Code: " << err.getCode() << std::endl;
std::cerr << "Error Message: " << err.getMessage() << std::endl;
return;
}
auto& result = outcome.value();
for (auto& bucket : result.getBuckets()) {
std::cout << "bucket: name:" << bucket.name
<< ", region:" << bucket.region
<< ", storageClass:" << bucket.storageClass
<< std::endl;
}
}));
// Wait for the asynchronous operation to complete.
std::this_thread::sleep_for(std::chrono::seconds(5));
return 0;
}
Çıktı, hesabınızdaki tüm bölgelerdeki tüm paketleri listeler.
İstemci yapılandırması
Özel alan adı kullanma
Bir özel alan adı tarayıcı tabanlı dosya önizlemesi ve CDN hızlandırmalı teslimat sağlar.
Örnek kodu çalıştırmadan önce<region-id>ifadesini bölge ve uç nokta listesinden gerçek bir bölge kimliği ile değiştirin; örneğinap-southeast-1.
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.endpoint = "https://your-custom-domain.com";
conf.useCName = true;
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
// Perform operations using the custom domain.
auto outcome = client.putObject(
oss::models::PutObjectRequest()
.setBucket("your-bucket")
.setKey("your-key")
.setBody(oss::RequestBody::fromString("Hello, OSS!")));
if (!outcome.has_value()) {
auto& err = outcome.error();
std::cerr << "Error: " << err.getMessage() << std::endl;
return 1;
}
std::cout << "Upload successful" << std::endl;
return 0;
}
Zaman aşımı denetimi
Bağlantı ve okuma/yazma zaman aşımlarını milisaniye cinsinden yapılandırmak için connectTimeout ve readWriteTimeout parametrelerini kullanın.
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
// Set the connection timeout to 10 seconds.
conf.connectTimeout = 10000;
// Set the read/write timeout to 30 seconds.
conf.readWriteTimeout = 30000;
oss::OSSClient client(conf);
Yeniden deneme ilkesi
Yerleşik StandardRetryer varsayılan olarak FullJitterBackoff stratejisini kullanır ve en fazla 3 yeniden deneme yapar. Ayarlamak için retryMaxAttempts parametresini kullanın.
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
// Set the maximum number of retries to 5.
conf.retryMaxAttempts = 5;
oss::OSSClient client(conf);
Özel yeniden deneme stratejisi örneği: CustomRetryStrategy.cpp.
HTTP/HTTPS protokolü
Varsayılan olarak HTTPS protokolü kullanılır. HTTP protokolünü kullanmak için disableSsl parametresini true olarak ayarlayın.
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
// Use the HTTP protocol.
conf.disableSsl = true;
oss::OSSClient client(conf);
Dahili uç noktası kullanma
ECS üzerinde dağıtıldığında genel ağ trafiği maliyetlerinden kaçınmak için dahili bir uç noktası kullanın.
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
// Use an internal endpoint.
conf.useInternalEndpoint = true;
oss::OSSClient client(conf);
Aktarım hızlandırma uç noktası kullanma
Uzun mesafeli veri aktarımları için aktarım hızlandırma uç noktası kullanın.
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
// Use a transfer acceleration endpoint.
conf.useAccelerateEndpoint = true;
oss::OSSClient client(conf);
Özel alan adı (CNAME) kullanma
OSS'e özel bir alan adı (CNAME) kullanarak erişin.
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
conf.endpoint = "https://your-custom-domain.com";
conf.useCName = true;
oss::OSSClient client(conf);
HTTP aktarımını özelleştirme
SDK varsayılan olarak cURL kullanır. httpTransport aracılığıyla değiştirebilirsiniz. Windows üzerinde WinHTTP de desteklenir.
Özel aktarım örnekleri: CurlCustomConfig.cpp ve WinHttpCustomConfig.cpp.
Erişim kimlik bilgilerini yapılandırma
SDK aşağıdaki kimlik doğrulama yöntemlerini destekler:
RAM kullanıcısı erişim anahtarı
Güvenli, internete açık olmayan bir ortamdaki uygulamalar için RAM kullanıcısının erişim anahtarını kullanın.
Ortam değişkenleri (Önerilen)
Kimlik bilgilerini OSS_ACCESS_KEY_ID ve OSS_ACCESS_KEY_SECRET ortam değişkenlerinden alın.
-
Bir RAM kullanıcısının erişim anahtarını kullanarak ortam değişkenlerini ayarlayın.
Linux
-
Komut satırından ortam değişkeni ayarlarını
~/.bashrcdosyasına eklemek için aşağıdaki komutları çalıştırın.echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc -
Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.
source ~/.bashrc -
Ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
-
Terminalde varsayılan kabuk türünüzü kontrol etmek için aşağıdaki komutu çalıştırın.
echo $SHELL -
Varsayılan kabuk türünüze göre aşağıdaki adımları izleyin.
Zsh
-
Ortam değişkeni ayarlarını
~/.zshrcdosyasına eklemek için aşağıdaki komutları çalıştırın.echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.
source ~/.zshrc -
Ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
-
Ortam değişkeni ayarlarını
~/.bash_profiledosyasına eklemek için aşağıdaki komutları çalıştırın.echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile -
Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.
source ~/.bash_profile -
Ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
-
Windows
CMD
-
CMD'de aşağıdaki komutları çalıştırın.
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" -
CMD'yi yeniden açın ve ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
-
PowerShell'de aşağıdaki komutları çalıştırın.
[System.Environment]::SetEnvironmentVariable('OSS_ACCESS_KEY_ID', 'YOUR_ACCESS_KEY_ID', [System.EnvironmentVariableTarget]::User) [System.Environment]::SetEnvironmentVariable('OSS_ACCESS_KEY_SECRET', 'YOUR_ACCESS_KEY_SECRET', [System.EnvironmentVariableTarget]::User) -
PowerShell'i yeniden açın ve ortam değişkenlerinin ayarlandığını doğrulamak için aşağıdaki komutları çalıştırın.
[System.Environment]::GetEnvironmentVariable('OSS_ACCESS_KEY_ID', [System.EnvironmentVariableTarget]::User) [System.Environment]::GetEnvironmentVariable('OSS_ACCESS_KEY_SECRET', [System.EnvironmentVariableTarget]::User)
-
Sistem ortam değişkenlerini değiştirdikten sonra değişikliklerin etkili olması için IDE'nizi ve terminalinizi yeniden başlatın.
-
Kimlik bilgilerini iletmek için ortam değişkenlerini kullanın.
Örnek kodu çalıştırmadan önce
<region-id>ifadesini gerçek bir bölge kimliği ile değiştirin; örneğincn-hangzhou.#include "alibabacloud/oss2/ClientConfiguration.h" #include "alibabacloud/oss2/OSSClient.h" #include "alibabacloud/oss2/credentials/CredentialsProvider.h" namespace oss = alibabacloud::oss2; int main() { auto conf = oss::ClientConfiguration::loadDefault(); conf.region = "<region-id>"; conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>(); oss::OSSClient client(conf); // Use the client to perform operations. return 0; }
Kodda açıkça belirtme
Erişim anahtarı kimliğini ve erişim anahtarı gizli anahtarını StaticCredentialsProvider kullanarak açıkça sağlayabilirsiniz.
Bu yöntem erişim anahtarınızı kodda açığa çıkarır ve yalnızca test amaçlı kullanılması önerilir. Üretim ortamları için ortam değişkenleri gibi daha güvenli bir yöntem kullanın.
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::StaticCredentialsProvider>(
"YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET");
oss::OSSClient client(conf);
// Use the client to perform operations.
return 0;
}
STS geçici kimlik bilgisi
STS geçici kimlik bilgileri bir erişim anahtarı kimliği, erişim anahtarı gizli anahtarı ve güvenlik belirtecinden oluşur. Belirteci el ile yönetmeli ve yenilemelisiniz.
Bir SDK kullanarak STS geçici kimlik bilgisi elde etmek için bkz. OSS'e erişmek için STS geçici kimlik bilgilerini kullanma.
Bir STS belirteci oluştururken bir sona erme süresi belirtmeniz gerekir. Belirtecin süresi dolduğunda otomatik olarak geçersiz hale gelir.
STS'den alınan erişim anahtarı kimliklerinin
STSön ekiyle başladığını unutmayın; örneğinSTS.L4aBSCSJVMuKg5U1****.
Ortam değişkenleri (Önerilen)
Geçici kimlik bilgilerini OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET ve OSS_SESSION_TOKEN ortam değişkenlerini kullanarak alın.
-
Geçici kimlik bilgilerini kullanarak ortam değişkenlerini ayarlayın.
macOS, Linux veya Unix
export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID> export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET> export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>Windows
set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID> set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET> set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN> -
Kimlik bilgilerini iletmek için ortam değişkenlerini kullanın. SDK'nın
EnvironmentVariableCredentialsProvidersağlayıcısı bu üç ortam değişkenini otomatik olarak okur.Örnek kodu çalıştırmadan önce
<region-id>ifadesini gerçek bir bölge kimliği ile değiştirin; örneğincn-hangzhou.#include "alibabacloud/oss2/ClientConfiguration.h" #include "alibabacloud/oss2/OSSClient.h" #include "alibabacloud/oss2/credentials/CredentialsProvider.h" namespace oss = alibabacloud::oss2; int main() { auto conf = oss::ClientConfiguration::loadDefault(); conf.region = "<region-id>"; // Automatically reads OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, and OSS_SESSION_TOKEN. conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>(); oss::OSSClient client(conf); // Use the client to perform operations. return 0; }
Kodda açıkça belirtme
Geçici erişim anahtarı kimliğini, erişim anahtarı gizli anahtarını ve güvenlik belirtecini StaticCredentialsProvider kullanarak açıkça sağlayabilirsiniz.
Yalnızca test amaçlıdır. Kimlik bilgilerini üretim koduna gömmeyin. Bunun yerine ortam değişkenlerini veya otomatik yenileme yapan bir SDK yöntemini kullanın.
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::StaticCredentialsProvider>(
"STS_ACCESS_KEY_ID", "STS_ACCESS_KEY_SECRET", "STS_SECURITY_TOKEN");
oss::OSSClient client(conf);
// Use the client to perform operations.
return 0;
}
RAMRoleARN, ECSRAMRole veya OIDCRoleARN
RAMRoleARN, ECSRAMRole ve OIDCRoleARN gibi kimlik doğrulama yöntemleri için CredentialsProviderFunc ile alibabacloud-credentials-cpp kitaplığının kullanılması önerilir.
-
Bağımlılığı yükleyin.
vcpkg install alibabacloud-credentials-cpp -
CMakeLists.txt dosyanıza bağımlılığı ekleyin.
find_package(alibabacloud_credentials REQUIRED) -
Kitaplığı
CredentialsProviderFunckullanarak entegre edin.RAMRoleARN
#include "alibabacloud/oss2/ClientConfiguration.h" #include "alibabacloud/oss2/OSSClient.h" #include "alibabacloud/oss2/credentials/CredentialsProvider.h" #include <darabonba/core/Client.hpp> #include <alibabacloud/credential.hpp> namespace oss = alibabacloud::oss2; int main() { auto credConfig = std::make_shared<Alibabacloud_Credential::Config>(); // The credential type must be ram_role_arn. credConfig->type = std::make_shared<std::string>("ram_role_arn"); // The access key ID of the RAM user. To avoid hardcoding, we recommend injecting this value through the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable. credConfig->accessKeyId = std::make_shared<std::string>("YOUR_ACCESS_KEY_ID"); // The access key secret of the RAM user. To avoid hardcoding, we recommend injecting this value through the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable. credConfig->accessKeySecret = std::make_shared<std::string>("YOUR_ACCESS_KEY_SECRET"); // The ARN of the RAM role to assume. Example: acs:ram::123456789012****:role/adminrole // You can also set this value by using the ALIBABA_CLOUD_ROLE_ARN environment variable. credConfig->roleArn = std::make_shared<std::string>("YOUR_ROLE_ARN"); // The role session name, used for auditing purposes. You can also set this value by using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable. credConfig->roleSessionName = std::make_shared<std::string>("your-session-name"); // (Optional) Further restrict permissions with a policy. This parameter is not required. // Example: {"Statement":[{"Action":["oss:GetObject"],"Effect":"Allow","Resource":["*"]}],"Version":"1"} // credConfig->policy = std::make_shared<std::string>("<Policy>"); // (Optional) The role session duration in seconds. Default: 3600 (1 hour). This parameter is not required. // credConfig->roleSessionExpiration = std::make_shared<long>(3600); auto credClient = std::make_shared<Alibabacloud_Credential::Client>(credConfig); auto conf = oss::ClientConfiguration::loadDefault(); conf.region = "<region-id>"; conf.credentialsProvider = std::make_shared<oss::CredentialsProviderFunc>( [credClient]() -> oss::Credentials { auto cred = credClient->getCredential(); auto ak = cred.getAccessKeyId(); auto sk = cred.getAccessKeySecret(); if (ak.empty() || sk.empty()) { return oss::Credentials::withRetryableError( "failed to get credentials from alibabacloud-credentials-cpp"); } auto token = cred.getSecurityToken(); return oss::Credentials(std::move(ak), std::move(sk), std::move(token)); }); oss::OSSClient client(conf); // Use the client to perform operations. return 0; }ECSRAMRole
#include "alibabacloud/oss2/ClientConfiguration.h" #include "alibabacloud/oss2/OSSClient.h" #include "alibabacloud/oss2/credentials/CredentialsProvider.h" #include <darabonba/core/Client.hpp> #include <alibabacloud/credential.hpp> namespace oss = alibabacloud::oss2; int main() { auto credConfig = std::make_shared<Alibabacloud_Credential::Config>(); // The credential type must be ecs_ram_role. credConfig->type = std::make_shared<std::string>("ecs_ram_role"); // The name of the RAM role granted to the ECS instance. This parameter is optional. // If you do not set it, the SDK automatically retrieves it from the metadata service. // We strongly recommend setting this parameter explicitly to reduce requests to the metadata service. credConfig->roleName = std::make_shared<std::string>("YOUR_ECS_ROLE_NAME"); auto credClient = std::make_shared<Alibabacloud_Credential::Client>(credConfig); auto conf = oss::ClientConfiguration::loadDefault(); conf.region = "<region-id>"; conf.credentialsProvider = std::make_shared<oss::CredentialsProviderFunc>( [credClient]() -> oss::Credentials { auto cred = credClient->getCredential(); auto ak = cred.getAccessKeyId(); auto sk = cred.getAccessKeySecret(); if (ak.empty() || sk.empty()) { return oss::Credentials::withRetryableError( "failed to get credentials from alibabacloud-credentials-cpp"); } auto token = cred.getSecurityToken(); return oss::Credentials(std::move(ak), std::move(sk), std::move(token)); }); oss::OSSClient client(conf); // Use the client to perform operations. return 0; }OIDCRoleARN
#include "alibabacloud/oss2/ClientConfiguration.h" #include "alibabacloud/oss2/OSSClient.h" #include "alibabacloud/oss2/credentials/CredentialsProvider.h" #include <darabonba/core/Client.hpp> #include <alibabacloud/credential.hpp> namespace oss = alibabacloud::oss2; int main() { auto credConfig = std::make_shared<Alibabacloud_Credential::Config>(); // The credential type must be oidc_role_arn. credConfig->type = std::make_shared<std::string>("oidc_role_arn"); // The ARN of the RAM role to assume. You can also set this value by using the ALIBABA_CLOUD_ROLE_ARN environment variable. credConfig->roleArn = std::make_shared<std::string>("YOUR_ROLE_ARN"); // The ARN of the OIDC identity provider. You can also set this value by using the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable. credConfig->oidcProviderArn = std::make_shared<std::string>("YOUR_OIDC_PROVIDER_ARN"); // The path to the OIDC token file, which is automatically mounted into the pod by RRSA. You can also set this value by using the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable. credConfig->oidcTokenFilePath = std::make_shared<std::string>("/var/run/secrets/tokens/oidc-token"); // The role session name, used for auditing purposes. You can also set this value by using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable. credConfig->roleSessionName = std::make_shared<std::string>("your-session-name"); // (Optional) Further restrict permissions with a policy. This parameter is not required. // credConfig->policy = std::make_shared<std::string>("<Policy>"); auto credClient = std::make_shared<Alibabacloud_Credential::Client>(credConfig); auto conf = oss::ClientConfiguration::loadDefault(); conf.region = "<region-id>"; conf.credentialsProvider = std::make_shared<oss::CredentialsProviderFunc>( [credClient]() -> oss::Credentials { auto cred = credClient->getCredential(); auto ak = cred.getAccessKeyId(); auto sk = cred.getAccessKeySecret(); if (ak.empty() || sk.empty()) { return oss::Credentials::withRetryableError( "failed to get credentials from alibabacloud-credentials-cpp"); } auto token = cred.getSecurityToken(); return oss::Credentials(std::move(ak), std::move(sk), std::move(token)); }); oss::OSSClient client(conf); // Use the client to perform operations. return 0; }Daha fazla kimlik doğrulama örneği: kimlik doğrulama örnekleri.
Anonim erişim
Herkese açık okuma erişimli paketlere ve nesnelere kimlik bilgisi olmadan erişin.
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = std::make_shared<oss::AnonymousCredentialsProvider>();
oss::OSSClient client(conf);
// Use the client to perform operations.
return 0;
}
Özel kimlik bilgisi sağlayıcısı
CredentialsProviderFunc ile özel kimlik bilgisi alma mantığını uygulayın.
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
#include <cstdlib>
namespace oss = alibabacloud::oss2;
// Example: Load credentials from custom environment variables or a configuration file.
static oss::Credentials loadCredentialsFromCustomSource() {
// In a real-world application, you can retrieve credentials from various sources:
// - A configuration file (such as ~/.ossrc)
// - A key management service (such as HashiCorp Vault or KMS)
// - A metadata service
// - A database
const char* ak = std::getenv("MY_APP_ACCESS_KEY_ID");
const char* sk = std::getenv("MY_APP_ACCESS_KEY_SECRET");
const char* token = std::getenv("MY_APP_SESSION_TOKEN");
if (!ak || !sk) {
// The error message propagates to OperationError::getMessage().
return oss::Credentials::withError(
"MY_APP_ACCESS_KEY_ID and MY_APP_ACCESS_KEY_SECRET must be set");
// For transient failures, such as network timeouts, use withRetryableError.
// The SDK automatically retries credential retrieval.
// return oss::Credentials::withRetryableError("...");
}
return oss::Credentials(ak, sk, token ? token : "");
}
int main() {
// The custom credential provider function is called every time credentials are required,
// allowing you to implement rotation, refresh, or caching logic.
auto provider = std::make_shared<oss::CredentialsProviderFunc>(
loadCredentialsFromCustomSource);
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region-id>";
conf.credentialsProvider = provider;
oss::OSSClient client(conf);
// Use the client to perform operations.
return 0;
}
API işlemlerini çağırma
API işlemleri tutarlı bir adlandırma kuralı ve çağırma deseni izler.
API adlandırma kuralı
Yöntem adları camelCase stilini kullanır. Her işlem bir <OperationName>Request parametresi alır ve bir <OperationName>Outcome (Outcome<Result, Error>) döndürür.
OSSClient (senkron):
OutcomeType operationName(const models::OperationNameRequest& request, const OperationOptions* options = nullptr)
OSSAsyncClient (yerel asenkron):
void operationNameAsync(const models::OperationNameRequest& request, const OperationNameAsyncCallback& callback, const OperationOptions* options = nullptr)
Çağırma modları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
İsteği iptal etme
Uzun süren işlemleri bir CancellationToken ile iptal etmek için OperationOptions içinde bir cancellationToken iletin. OSS C++ SDK V2 iki iptal modu sağlar:
Anında iptal et
Devam eden bir isteği kesintiye uğratmak için başka bir iş parçacığından CancellationTokenSource::cancel() yöntemini çağırın.
// Cancel the request from another thread.
auto cts = oss::CancellationTokenSource::create();
oss::OperationOptions opts;
opts.cancellationToken = cts->getToken();
// Start the request in another thread.
auto future = std::async([&]() {
return client.getObject(request, &opts);
});
// Cancel from the current thread.
cts->cancel();
Son tarihle iptal et
Bir zaman aşımı ayarlamak için cancelAfter() yöntemini çağırın. SDK, zaman aşımı süresi dolduğunda isteği otomatik olarak iptal eder.
// Set a 30-second timeout for automatic cancellation.
auto cts = oss::CancellationTokenSource::create();
cts->cancelAfter(std::chrono::seconds(30));
oss::OperationOptions opts;
opts.cancellationToken = cts->getToken();
auto outcome = client.getObject(request, &opts);
Hata işleme
OSS C++ SDK V2, std::expected ile uyumlu olan Outcome<Result, Error> yapısını kullanır. Başarıyı kontrol etmek için has_value() yöntemini çağırın. Başarılıysa sonucu value() ile veya sonuç nesnesine başvurarak (*outcome) alın. Aksi takdirde hata nesnesini error() ile alın.
auto outcome = client.putObject(request);
if (!outcome.has_value()) {
auto& err = outcome.error();
std::cerr << "Error code: " << err.getCode() << std::endl;
std::cerr << "Error message: " << err.getMessage() << std::endl;
std::cerr << "EC: " << err.getEC() << std::endl;
std::cerr << "Request ID: " << err.getRequestId() << std::endl;
std::cerr << "Request target: " << err.getRequestTarget() << std::endl;
}
-DUSE_STD_EXPECTED=ON bayrağıyla (C++23) derleme yaptığınızda Outcome türü std::expected için bir tür takma adı haline gelir; bu da .and_then(), .transform() ve .or_else() gibi monadik işlemleri destekler.
Örnek kodlar
Aşağıdaki tabloda kullanılabilir örnek kodlar listelenmiştir.
|
Kategori |
Açıklama |
Senkron sürüm |
Asenkron sürüm |
|
Paketler |
Paket oluşturma |
||
|
Paketleri listeleme |
|||
|
Paket silme |
|||
|
Paket bilgilerini alma |
|||
|
Paket konumunu alma |
|||
|
Nesne yükleme |
Basit yükleme |
||
|
Ekleme yoluyla yükleme |
|||
|
Parçalı yükleme |
|||
|
Parçalı kopyalama |
|||
|
Nesne indirme |
Basit indirme |
||
|
Nesne kopyalama |
|||
|
Nesne yönetimi |
Nesneleri listeleme |
||
|
Nesneleri listeleme V2 |
|||
|
Nesne silme |
|||
|
Birden çok nesne silme |
|||
|
Nesne meta verilerini alma |
|||
|
Basitleştirilmiş nesne meta verilerini alma |
|||
|
Arşivlenmiş nesneler |
Nesne geri yükleme |
||
|
Geri yüklenmiş nesneyi silme |
|||
|
Sembolik bağlantılar |
Sembolik bağlantı oluşturma |
||
|
Sembolik bağlantı alma |
|||
|
Nesne etiketleme |
Nesne etiketleme ayarlama |
||
|
Nesne etiketleme alma |
|||
|
Nesne etiketleme silme |
|||
|
Erişim denetimi |
Paket ACL ayarlama |
||
|
Paket ACL alma |
|||
|
Nesne ACL ayarlama |
|||
|
Sürüm oluşturma |
Paket sürüm oluşturma ayarlama |
||
|
Paket sürüm oluşturma durumunu alma |
|||
|
Nesne sürümlerini listeleme |
|||
|
Hotlink koruması |
Hotlink koruması ayarlama |
||
|
Hotlink koruması yapılandırmasını alma |
|||
|
Sistem işlevleri |
Uç nokta bilgilerini sorgulama |
||
|
Ön imzalı URL |
İndirme için ön imzalı URL oluşturma |
- |
|
|
Yükleme için ön imzalı URL oluşturma |
- |
||
|
HEAD isteği için ön imzalı URL oluşturma |
- |
||
|
Parçalı yükleme için ön imzalı URL oluşturma |
- |
||
|
Genel API |
|
- |
|
|
Veri işleme |
Nesne işleme ve sonucu kaydetme |
||
|
Asenkron nesne işleme görevi gönderme |
|||
|
Sayfalayıcı |
Tüm paketleri listeleme |
- |
|
|
Tüm nesneleri listeleme (önerilen) |
- |
||
|
Tüm nesne sürümlerini listeleme |
- |
||
|
Yüklenen tüm parçaları listeleme |
- |
||
|
Tüm parçalı yüklemeleri listeleme |
- |
||
|
Tüm nesneleri listeleme (eski, önerilmez) |
- |
||
|
Senaryo örnekleri |
|
- |
|
|
|
- |
||
|
Diğer senaryo örnekleri |
- |