すべてのプロダクト
Search
ドキュメントセンター

:データストレージ

最終更新日:Dec 22, 2023

データストレージ

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

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

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

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

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

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

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

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

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

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

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

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

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

OSSData *testData = [ossService getOSSBucketWithBucket:ossBucket key:@"<objectName>"];

[testData getWithDataCallBack:^(NSData *data, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
        return;
    }
    NSLog(@"Success, data length: %lu", (unsigned long)data.length);
} withProgressCallBack:^(float progress) {
    NSLog(@"Current progress: %f", progress);
}];

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

[testData setRangeFrom:1 to:40];

[testData getWithDataCallBack:^(NSData *data, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
        return;
    }
    NSLog(@"Success, data length: %lu", (unsigned long)data.length);
} withProgressCallBack:^(float progress) {
    NSLog(@"Current progress: %f", progress);
}];

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

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

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

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

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

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

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

[testData enableUploadCheckMd5sum:YES]; // Enables the upload MD5 check
[testData setData:upData withType:@"<dataType>"];
[testData uploadWithUploadCallback:^(BOOL isSuccess, NSError *error) {
    if (isSuccess) {
        NSLog(@"Upload success!");
    } else {
        NSLog(@"Error: %@", error);
    }
} withProgressCallback:^(float progress) {
    NSLog(@"Current progress: %f", progress);
}];

4. データの削除

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

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

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

[testData deleteWithDeleteCallback:^(BOOL isSuccess, NSError *error) {
    if (isSuccess) {
        NSLog(@"Delete success!");
    } else {
        NSLog(@"Error: %@", error);
    }
}];

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

5. データのコピー

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

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

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

非同期バージョン:

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

6. データ URL の生成

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

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

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

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]’ を呼び出す必要があります。

TaskHandler * taskHandler = [testData getWithDataCallBack:^(NSData *data, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
        return;
    }
    NSLog(@"Success, data length: %lu", (unsigned long)data.length);
} withProgressCallBack:^(float progress) {
    NSLog(@"Current progress: %f", progress);
}];

[taskHandler cancel];

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

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

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

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

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

[ossData setMetaKey:@"x-oss-meta-key1" withMetaValue:@"value1"]; // This is only valid for upload operations and takes effect when called prior to the upload

[ossData setMetaKey:@"x-oss-meta-key2" withMetaValue:@"value2"]; // Custom meta attributes must have the "x-oss-meta-" prefix

[ossData setMetaKey:@"x-oss-meta-key3" withMetaValue:@"value3"]; // Meta attribute key-value pairs of the same name are not supported

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