edit-icon download-icon

独立マルチパートアップロード

最終更新日: Sep 14, 2016

ブレークポイントアップロードがニーズに合っていない場合は、SDK で提供されている独立マルチパートアップロードインターフェイスを使用すると、アップロードの各パートを制御できます。マルチパートアップロードには、[get UploadId]、[upload a single part]、[complete upload]、[list uploaded parts]、および [cancel upload] の 5 つのインターフェイスが関連付けられています。これらのインターフェイスは ‘OSSMultipart’ を介して使用します。マルチパートアップロード中は、’OSSMultipart’ オブジェクトを使用して続行するか、各インターフェイスを呼び出すときに別の ‘OSSMultipart’ オブジェクトを呼び出すことができます。例:

  1. NSString * uploadObjectKey = @"multipartUploadDataKey";
  2. NSError * error = nil;
  3. OSSMultipart * multipart = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
  4. NSString * uploadId = [multipart initiateMultiPartUploadWithError:&error];
  5. NSLog(@"UploadId: %@", uploadId);
  6. NSMutableArray * uploadPartResults = [[NSMutableArray alloc] init];
  7. for (int i = 0; i < 2; i++) { // If you need to upload two parts
  8. NSData * data = <Data of each part>;
  9. [multipart setPartNumber:i + 1];
  10. [multipart setPartData:data];
  11. UploadPartResult * result = [multipart uploadPartWithError:&error];
  12. [uploadPartResults addObject:result];
  13. }
  14. NSArray * listPartResult = [multipart listPartsWithError:&error]; // If you need to list the parts that have been uploaded
  15. for (UploadPartInfo * info in listPartResult) {
  16. NSLog(@"UploadPartInfo : %d, %@", [info partNumber], [info etag]);
  17. }
  18. [multipart selfSetPartList:uploadPartResults];
  19. [multipart completeMultipartUploadWithError:&error];

1 つのパートでアップロードするデータを設定する場合、データストリームからデータにアクセスするか、バイト配列をデータとして直接設定できます。さらに、特殊なニーズに合うように各ステージで別の ‘OSSMultipart’ オブジェクトを使用する必要がある場合は、前のステージからの情報を次のステージのアップロード ID として保存する必要があります。例:

  1. NSString * uploadObjectKey = @"multipartUploadData";
  2. NSError * error = nil;
  3. OSSMultipart * multipart1 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
  4. NSString * uploadId = [multipart1 initiateMultiPartUploadWithError:&error];
  5. NSLog(@"UploadId: %@", uploadId);
  6. NSMutableArray * uploadPartResults = [[NSMutableArray alloc] init];
  7. for (int i = 0; i < 2; i++) {
  8. OSSMultipart * multipart2 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
  9. [multipart2 selfSetUploadId:uploadId];
  10. NSData * data = <Data of each part>;
  11. [multipart2 setPartNumber:i + 1];
  12. [multipart2 setPartData:data];
  13. UploadPartResult * result = [multipart2 uploadPartWithError:&error];
  14. [uploadPartResults addObject:result];
  15. }
  16. OSSMultipart * multipart3 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
  17. [multipart3 selfSetUploadId:uploadId];
  18. NSArray * listPartResult = [multipart3 listPartsWithError:&error];
  19. for (UploadPartInfo * info in listPartResult) {
  20. NSLog(@"UploadPartInfo : %d, %@", [info partNumber], [info etag]);
  21. }
  22. OSSMultipart * multipart4 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
  23. [multipart4 selfSetUploadId:uploadId];
  24. [multipart4 selfSetPartList:uploadPartResults];
  25. [multipart4 completeMultipartUploadWithError:&error];

これらすべてのインターフェイス呼び出しは時間のかかるネットワーク操作であり、現在のスレッドが停止したり、エラーになったりする可能性があることに注意する必要があります。エラー処理の場合は、以下の例外処理の章を参照してください。