このトピックでは、Object Storage Service (OSS) SDK for iOSを使用して、オブジェクトのアップロードやダウンロードなどの基本的な操作を実行する方法について説明します。
背景情報
OSS SDK For iOSの詳細については、次の例をご参照ください。
git cloneコマンドを実行し、OSS_ACCESSKEY_IDやOSS_SECRETKEY_IDなどの必要なパラメーターを設定して、プロジェクトのクローンを作成することもできます。
次の図に示すように、プロジェクトデモを実行します。
サンプルコード
次のコードは、iOSおよびmacOSプラットフォームでオブジェクトをアップロードおよびダウンロードする方法を示しています。
必要な参照を追加します。
#import <AliyunOSSiOS/OSSService.h>
OSSClientインスタンスを初期化します。
OSSClientインスタンスを初期化するには、エンドポイント、認証モード、およびクライアント設定を指定する必要があります。 3つの認証モードが利用可能です: プレーンテキスト設定、自己署名、およびセキュリティトークンサービス (STS) 認証。 STS認証モードの使用方法の詳細については、「アクセス許可」をご参照ください。
sts.pyスクリプトファイルで、AccessKeyId、AccessKeySecret、およびRoleArnパラメーターを設定します。 OSS SDK for Pythonを使用して、ローカルHTTPサービスを開始します。 クライアントコードを使用してローカルサービスにアクセスし、StsToken.AccessKeyId、StsToken.SecretKey、およびStsToken.SecurityTokenパラメーターの値を取得します。
説明STSを使用してOSSへのアクセスを許可する方法の詳細については、「STSが提供する一時的な資格情報を使用してOSSにアクセスする」をご参照ください。 AssumeRole操作を呼び出すか、さまざまなプログラミング言語のSTS SDKを使用して、STSから一時的なアクセス資格情報を取得できます。 詳細については、「STS SDKの概要」をご参照ください。 一時的なアクセス資格情報には、セキュリティトークンと、AccessKey IDとAccessKeyシークレットで構成される一時的なAccessKeyペアが含まれます。
NSString * endpoint = @ "https://oss-cn-hangzhou.aliyuncs.com"; // モバイルデバイスを使用する場合は、STSを使用してOSSClientインスタンスを初期化することを推奨します。 id<OSSCredentialProvider> credential = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^ OSSFederationToken * _Nullable { OSSFederationToken * token = [OSSFederationToken new]; // STSから取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 token.tAccessKey = @ "AccessKeyId"; token.tSecretKey = @ "AccessKeySecret"; // STSから取得したセキュリティトークンを指定します。 token.tToken = @ "SecurityToken"; // 一時的なアクセス資格情報の有効期限を設定します。 token.expirationTimeInGMTFormat = @ "Expiration"; トークンを返します。}]; client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
OSSClientインスタンスを使用して、マルチスレッドのアップロードおよびダウンロード要求を開始し、複数のタスクを同時に実行できます。
オブジェクトのアップロード
OSSコンソールにバケットがある場合、SDK関連の操作ごとに
OSSTask
が返されます。OSSTask
の継続を非同期で完了するように設定するか、waitUntilFinished
を呼び出してタスクが完了するのを待ちます。OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // バケットの名前を指定します。 例: examplebucket. put.bucketName = @ "examplebucket"; // オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めることはできません。 例: exampledir/testdir/exampleobject.txt。 put.objectKey = @ "exampledir/testdir/exampleobject.txt"; // NSDataを直接アップロードします。 put.uploadingData = <NSData *>; put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@ "% lld, % lld, % lld", bytesSent, totalByteSent, totalBytesExpectedToSend); }; OSSTask * putTask = [client putObject:put]; [putTask continueWithBlock:^ id(OSSTask * task) { if (!task.error) { NSLog(@ "オブジェクトのアップロード成功!"); } else { NSLog(@ "オブジェクトのアップロードに失敗、エラー: % @" 、task.error); } nilを返します。}]; // タスクが完了するまで待ちます。 // [putTask waitUntilFinished];
指定したオブジェクトをダウンロードします。
次のコードは、指定したオブジェクトを
NSData
としてダウンロードする方法の例を示しています。OSSGetObjectRequest * request = [OSSGetObjectRequest new]; // バケットの名前を指定します。 例: examplebucket. request.bucketName = @ "examplebucket"; // オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めることはできません。 例: exampledir/testdir/exampleobject.txt。 request.objectKey = @ "exampledir/testdir/exampleobject.txt"; request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) { NSLog(@ "% lld, % lld, % lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); }; OSSTask * getTask = [client getObject:request]; [getTask continueWithBlock:^ id(OSSTask * task) { if (!task.error) { NSLog(@ "オブジェクトのダウンロード成功!"); OSSGetObjectResult * getResult = task.result; NSLog(@ "download result: % @", getResult.downloadedData); } else { NSLog(@ "オブジェクトのダウンロードに失敗、エラー: % @" 、task.error); } nilを返します。}]; // タスクが完了するまで待ちます。 // [タスクwaitUntilFinished];