ファイルが大きすぎる、またはダウンロードに時間がかかりすぎる場合は、ストリーミングダウンロードを使用できます。この機能を使用すると、ダウンロードが完了するまでファイルをセグメント単位で処理できます。
注意事項
このトピックのサンプルコードを使用する前に、OSSClient インスタンスを作成する必要があります。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用してインスタンスを作成できます。詳細については、「初期化 (iOS SDK)」をご参照ください。
説明バケットのリージョンは、初期化時に指定したエンドポイントのリージョンによって決まります。
Object Storage Service (OSS) の iOS SDK は、ストリームベースのダウンロード用の API 操作を提供していません。代わりに、
NSURLSessionライブラリのdidReceiveData関数と同様のセグメント化されたコールバック機能を提供します。セグメント化されたコールバックを設定した場合、ダウンロード結果に実際のデータは含まれません。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 定義 |
GetObject |
| オブジェクトをダウンロードします。 |
| オブジェクトをダウンロードする際に、versionId を通じてオブジェクトのバージョンを指定する場合、この権限が必要です。 | |
| オブジェクトをダウンロードする際に、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、この権限が必要です。 |
サンプルコード
次のコードは、ストリーミングダウンロードを実行する方法を示しています。
OSSGetObjectRequest * request = [OSSGetObjectRequest new];
// バケット名を指定します。例:examplebucket。
request.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。バケット名は含めないでください。例:exampledir/exampleobject.txt。
request.objectKey = @"exampledir/exampleobject.txt";
// セグメント化されたコールバック関数を設定します。
request.onRecieveData = ^(NSData * data) {
NSLog(@"データ受信、長さ: %ld", [data length]);
};
OSSTask * getTask = [client getObject:request];
[getTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"download object success!");
} else {
NSLog(@"download object failed, error: %@" ,task.error);
}
return nil;
}];
// [getTask waitUntilFinished];
// [request cancel];関連ドキュメント
ストリーミングダウンロードの API 操作の詳細については、「GetObject」をご参照ください。
OSSClient インスタンスの初期化の詳細については、「初期化 (iOS SDK)」をご参照ください。