このトピックでは、Object Storage Service (OSS) SDK for iOSを使用して、オブジェクトのアップロードやダウンロードなどの一般的な操作を実行する方法について説明します。
前提条件
iOS用のOSS SDKがインストールされています。 詳細については、「インストール」をご参照ください。
デモプロジェクト
次のデモプロジェクトを参照して、バケットの作成、ローカルファイルのアップロード、およびオブジェクトのダウンロード方法を確認できます。
次の方法を使用して、デモプロジェクトを試すことができます。
プロジェクトのクローン: git Cloneコマンドを実行して、デモプロジェクトを取得します。
パラメーターを設定します。
AliyunOSSSwiftインスタンスを実行する前に、OSSSwiftGlobalDefines.swiftファイルで必要なパラメーターを設定する必要があります。
AliyunOSSSDKを実行する前に、OSSTestMacros.hファイルで必要なパラメーターを設定する必要があります。
Security Token Service (STS) を開始します。
プロジェクトのsts_local_serverディレクトリでローカルの認証スクリプトを実行してローカルSTS認証サーバーを起動し、AccessKeyId、AccessKeySecret、およびRoleArnパラメーターを設定します。
Pythonを使用してローカルHTTPサービスhttpserver.pyを起動します。 この場合、クライアントコードを実行してローカルHTTPサービスにアクセスし、StsToken.AccessKeyId、StsToken.SecretKey、およびStsToken.SecurityTokenパラメーターの値を取得できます。
AliyunOSSSDK-iOS-デモプロジェクトの例を実行します。 次の図に示すように、次の結果が返されます。
サンプルコード
次のサンプルコードは、iOSおよびmacOSプラットフォームでオブジェクトをアップロードおよびダウンロードする方法の例を示しています。
OSSソフトウェアパッケージをインポートします。
OSSを使用する前に、必要なヘッダーファイルをインポートします。
#import <AliyunOSSiOS/OSSService.h>
OSSClientインスタンスを初期化します。
アクセス許可
OSSでは、プレーンテキスト設定、自己署名、STS認証の3つの認証モードがサポートされています。 モバイルデバイスにはSTS認証モードを使用することを推奨します。 詳細については、「STS認証モード」をご参照ください。
一時的なアクセス資格情報の取得
プレーンテキスト設定モード: 認証にAccessKey IDとAccessKeySecretを使用します。
自己署名モード: 認証用の署名文字列を生成します。 詳細については、「自己署名モード」をご参照ください。
STS認証モード: 認証のためにSTSによって提供される一時的なアクセス資格情報を使用します。 STSのAssumeRole操作を呼び出すか、さまざまなプログラミング言語でSTS SDKを使用して一時的なアクセス資格情報を取得する方法の詳細については、「STSが提供する一時的なアクセス資格情報を使用してOSSにアクセスする」をご参照ください。
一時的なアクセス資格情報を使用したiOS用OSS SDKの初期化
次のサンプルコードは、アプリケーションライフサイクル全体でOSSClientインスタンスを初期化する方法の例を示しています。
@interface AppDelegate () @property (nonatomic, strong) OSSClient *client; @end /** * Obtain the URL of STS and configure the URL on the user-built server. */ #define OSS_STS_URL @"oss_sts_url" /** * The endpoint of the region in which the bucket is located. */ #define OSS_ENDPOINT @"your bucket's endpoint" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Initialize the OSSClient instance. [self setupOSSClient]; return YES; } - (void)setupOSSClient { // Initialize the credentialProvider that automatic refreshes. id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:OSS_STS_URL]; // Configure the client, such as the timeout period and DNS resolution. OSSClientConfiguration *cfg = [[OSSClientConfiguration alloc] init]; client = [[OSSClient alloc] initWithEndpoint:OSS_ENDPOINT credentialProvider:credentialProvider clientConfiguration:cfg]; }
説明アプリケーションがリージョンで1つのバケットのみを使用する場合、OSSClientインスタンスのライフサイクルをアプリケーションのライフサイクルと同じに設定することを推奨します。リージョンとエンドポイント
バケットを作成する
次のサンプルコードは、examplebucketという名前のバケットを作成する方法の例を示しています。
// Construct a request to create a bucket. OSSCreateBucketRequest * create = [OSSCreateBucketRequest new]; // Set the name of the bucket to examplebucket. create.bucketName = @"examplebucket"; // Set the access control list (ACL) of the bucket to private. create.xOssACL = @"private"; // Set the storage class of the bucket to Infrequent Access (IA). create.storageClass = OSSBucketStorageClassIA; OSSTask * createTask = [client createBucket:create]; [createTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"create bucket success!"); } else { NSLog(@"create bucket failed, error: %@", task.error); } return nil; }]; // Wait for the task to complete. // [createTask waitUntilFinished];
説明OSSTask
は、OSS SDKを使用して実行されるすべての操作に対して返されます。OSSTask
の継続アクションを指定してタスクの完了を同期的に待つか、waitUntilFinished
を呼び出してタスクの完了を待つことができます。ローカルファイルのアップロード
次のサンプルコードは、ローカルファイルをOSSにアップロードする方法の例を示しています。
OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // Specify the name of the bucket. Example: examplebucket. put.bucketName = @"examplebucket"; // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/testdir/exampleobject.txt. put.objectKey = @"exampledir/testdir/exampleobject.txt"; put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"]; // put.uploadingData = <NSData *>; // Directly upload NSData. // Directly upload 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(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil; }]; // Wait for the task to complete. // [putTask waitUntilFinished];
オブジェクトのダウンロード
次のサンプルコードは、特定のオブジェクトをローカルコンピューターにダウンロードする方法の例を示しています。
OSSGetObjectRequest * request = [OSSGetObjectRequest new]; // Specify the name of the bucket. Example: examplebucket. request.bucketName = @"examplebucket"; // Specify the full path of the object. Do not include the bucket name in the full path. Example: 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(@"download object success!"); OSSGetObjectResult * getResult = task.result; NSLog(@"download result: %@", getResult.downloadedData); } else { NSLog(@"download object failed, error: %@" ,task.error); } return nil; }]; // Wait for the task to complete. // [task waitUntilFinished];