edit-icon download-icon

データストレージ

最終更新日: Sep 14, 2016

OSS iOS SDK は、’OSSData’ を使用してデータストレージ操作を実行します。ここで、データはアプリケーションの実行時のメモリ内のデータを示します。したがって、アプリケーションの実行時にメモリ内のデータセグメントをアップロードする必要がある場合や、OSS からローカルメモリにデータを ‘NSData’ としてダウンロードして処理する場合は、このような操作を実行する必要があります。

‘OSSData’ インスタンスを作成するときは、’OSSBucket’ と ‘ObjectKey’ を指定する必要があります。これは、作業する OSS のデータ項目を示しています。インスタンスは次のように取得されます。

  1. OSSData *ossData = [ossService getOSSDataWithBucket:ossBucket key:@"<objectName>"];

1. データのダウンロード

‘OSSData’ インスタンスを作成した後に、指定した ‘OSSBucket’ および ‘ObjectKey’ が OSS に存在するデータに対応している場合、インスタンスをダウンロードできます。コードは次のとおりです。

  1. NSError *error = nil;
  2. NSData *yourData = [ossData get:&error];//storage error message

特定の範囲のデータをダウンロードするには、次のコードを使用します。

  1. NSError *error = nil;
  2. [ossData setRangeFrom:1 to:40];
  3. [ossData setRangeFrom:30 to:RANGE_INFINITE]; // Sets the download range between 30 and the end of the object
  4. [ossData setRangeFrom:RANGE_INFINITE to:20]; // Indicates a download of the last 20 bytes of the object
  5. NSData *yourData = [ossData get:&error]; // storage error message

ここでは、次の点に注意する必要があります。

  • これは同期リターンであり、メソッドが返されるまでスレッドが停止する場合があります。
  • データの操作時に、OSS iOS SDK は OSS サーバーと相互に作業する必要があります。したがって、このコードは処理時間コストの高いものと考えられます。ただし、非同期のインターフェイス ‘getWithDataCallback: withProgressCallback:’ を使用することができます。以下のセクションを参照してください。

2. 非同期データダウンロードバージョン

実際、OSS iOS SDK には時間がかかるすべてのメソッドに対する非同期バージョンが用意されているため、独自に実装したコールバックメソッドをインポートできます。非同期バージョンは、新しいスレッドで操作を実行し、処理ロジックを非同期にコールバックします。

データのダウンロードの場合は、次のように非同期インターフェイスを使用します。

  1. OSSData *testData = [ossService getOSSBucketWithBucket:ossBucket key:@"<objectName>"];
  2. [testData getWithDataCallBack:^(NSData *data, NSError *error) {
  3. if (error) {
  4. NSLog(@"Error: %@", error);
  5. return;
  6. }
  7. NSLog(@"Success, data length: %lu", (unsigned long)data.length);
  8. } withProgressCallBack:^(float progress) {
  9. NSLog(@"Current progress: %f", progress);
  10. }];

ダウンロードするデータの範囲を指定する必要がある場合は、以下のコードを使用します。

  1. [testData setRangeFrom:1 to:40];
  2. [testData getWithDataCallBack:^(NSData *data, NSError *error) {
  3. if (error) {
  4. NSLog(@"Error: %@", error);
  5. return;
  6. }
  7. NSLog(@"Success, data length: %lu", (unsigned long)data.length);
  8. } withProgressCallBack:^(float progress) {
  9. NSLog(@"Current progress: %f", progress);
  10. }];

非同期インターフェイスを使用するときは、必ずコールバックメソッドをインポートしてください。コールバックメソッドが必要ない場合は、空白のままでかまいません。

3. データのアップロード

アプリケーションを実行するときに、メモリ内のデータを OSS にアップロードする必要がある場合は、最初に ‘OSSBucket’ および ‘ObjectKey’ を指定して ‘OSSData’ インスタンスを作成する必要があります。その後、’setData’ インターフェイスを呼び出して、アップロードするデータとその型を指定します。最後に、アップロードメソッドをもう一度呼び出してデータをアップロードします。

コードは次のとおりです。

  1. NSError *error = nil;
  2. OSSData *testData = [ossService getOSSDataWithBucket:ossBucket key:key];
  3. [testData enableUploadCheckMd5sum:YES]; // Enables the upload MD5 check
  4. [testData setData:upData withType:@"<dataType>"];
  5. [testData upload:&error];

アップロードが完了すると、OSS の ‘sampleBucket’ という名前のバケットに ‘sampleData’ という名前の新しいデータ項目が作成され、アップロードした ‘data’ が含まれます。

データのアップロードにも、同じように非同期バージョンがあります。

  1. [testData enableUploadCheckMd5sum:YES]; // Enables the upload MD5 check
  2. [testData setData:upData withType:@"<dataType>"];
  3. [testData uploadWithUploadCallback:^(BOOL isSuccess, NSError *error) {
  4. if (isSuccess) {
  5. NSLog(@"Upload success!");
  6. } else {
  7. NSLog(@"Error: %@", error);
  8. }
  9. } withProgressCallback:^(float progress) {
  10. NSLog(@"Current progress: %f", progress);
  11. }];

4. データの削除

指定した ‘OSSBucket’ および ‘ObjectKey’ に対応するデータを表す ‘OSSData’ インスタンスを作成した後に、削除メソッドを呼び出してこのデータ項目を削除します。コードは次のとおりです。

  1. NSError *error = nil;
  2. [testData delete:&error];

同じように非同期バージョンがあります。

  1. [testData deleteWithDeleteCallback:^(BOOL isSuccess, NSError *error) {
  2. if (isSuccess) {
  3. NSLog(@"Delete success!");
  4. } else {
  5. NSLog(@"Error: %@", error);
  6. }
  7. }];

削除操作では、進行中の操作は表示されません。実装の進行にコールバックメソッドは必要ありません。次のコピーメソッドも同様です。

5. データのコピー

既存のオブジェクトのデータを testData で表されるオブジェクトへコピーできます。データの sourceOSSBucket および sourceObjectName を指定するだけです。

コードは次のとおりです。

  1. NSError *error = nil;
  2. [testData copyFromBucket:@"<sourceOSSBucket>" key:@"<sourceObjectName>" error:&error];

非同期バージョン:

  1. [testData copyFromWithBucket:@"<sourceOSSBucket>" withKey:@"<sourceObjectName>" withCopyCallback:^(BOOL isSuccess, NSError *error) {
  2. if (isSuccess) {
  3. NSLog(@"Copy success!");
  4. } else {
  5. NSLog(@"Error: %@", error);
  6. }
  7. }];

6. データ URL の生成

指定した ‘OSSBucekt’ および ‘objectKey’ のデータを作成した後に、’getResourceURL’ インターフェイスを呼び出してアクセス URL を生成できます。これを使用して、サードパーティによる URL アクセスを許可できます。データのバケットに ‘公開読み取り’ 権限がない場合は、このインターフェイスの ‘accessKey’ と有効期間をインポートする必要があります。この URL は有効期間が終了すると期限が切れます。

  1. NSString *url = [ossData getResourceURL:@"accessKey" andExpire:availablePeriodInSeconds]; // The generated URL will expire in availablePeriodInSeconds seconds

バケットに ‘公開読み取り’ 権限がある場合は、次のように呼び出すだけです。

  1. NSString *url = [ossData getResourceURL]; // Because the Bucket has Public-Read permission, you do not need to import an accessKey or validity period

7. 非同期のアップロード/ダウンロードのキャンセル

なんらかの理由で非同期のアップロード/ダウンロード動作を続けない場合は、このインターフェイスを呼び出して ‘taskHandler’ を取得してから ‘[taskHandler cancel]’ を呼び出す必要があります。

  1. TaskHandler * taskHandler = [testData getWithDataCallBack:^(NSData *data, NSError *error) {
  2. if (error) {
  3. NSLog(@"Error: %@", error);
  4. return;
  5. }
  6. NSLog(@"Success, data length: %lu", (unsigned long)data.length);
  7. } withProgressCallBack:^(float progress) {
  8. NSLog(@"Current progress: %f", progress);
  9. }];
  10. [taskHandler cancel];

注意: 非同期のファイルのアップロード/ダウンロードをキャンセルする操作は似ているため、次のセクションでは繰り返しません。

8. アップロード時のカスタムメタ属性の追加

OSS のデータには独自のメタ属性があります。システムに自動的に追加される属性に加え、”x-oss-meta-“ プレフィックスを使用してカスタム属性を指定できます。詳細については、OSS プロダクトのドキュメントを参照してください。

アップロード時に指定した属性は、SDK の get メタ属性メソッドで個別に取得することができます。詳細については、「メタのみの取得」セクションを参照してください。

アップロードの前にカスタムメタ属性を追加するためのコードは次のとおりです。

  1. [ossData setMetaKey:@"x-oss-meta-key1" withMetaValue:@"value1"]; // This is only valid for upload operations and takes effect when called prior to the upload
  2. [ossData setMetaKey:@"x-oss-meta-key2" withMetaValue:@"value2"]; // Custom meta attributes must have the "x-oss-meta-" prefix
  3. [ossData setMetaKey:@"x-oss-meta-key3" withMetaValue:@"value3"]; // Meta attribute key-value pairs of the same name are not supported

注意: “x-oss-meta-“ プレフィックスを使用しないでメタ属性を追加した場合は、無視されます。