データストレージ
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-“ プレフィックスを使用しないでメタ属性を追加した場合は、無視されます。