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

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

最終更新日:Dec 22, 2023

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

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

NSString * uploadObjectKey = @"multipartUploadDataKey";
NSError * error = nil;

OSSMultipart * multipart = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
NSString * uploadId = [multipart initiateMultiPartUploadWithError:&error];
NSLog(@"UploadId: %@", uploadId);

NSMutableArray * uploadPartResults = [[NSMutableArray alloc] init];
for (int i = 0; i < 2; i++) { // If you need to upload two parts
    NSData * data = <Data of each part>;
    [multipart setPartNumber:i + 1];
    [multipart setPartData:data];
    UploadPartResult * result = [multipart uploadPartWithError:&error];
    [uploadPartResults addObject:result];
}

NSArray * listPartResult = [multipart listPartsWithError:&error]; // If you need to list the parts that have been uploaded
for (UploadPartInfo * info in listPartResult) {
    NSLog(@"UploadPartInfo : %d, %@", [info partNumber], [info etag]);
}

[multipart selfSetPartList:uploadPartResults];
[multipart completeMultipartUploadWithError:&error];

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

NSString * uploadObjectKey = @"multipartUploadData";
NSError * error = nil;
OSSMultipart * multipart1 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
NSString * uploadId = [multipart1 initiateMultiPartUploadWithError:&error];

NSLog(@"UploadId: %@", uploadId);

NSMutableArray * uploadPartResults = [[NSMutableArray alloc] init];
for (int i = 0; i < 2; i++) {
    OSSMultipart * multipart2 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
    [multipart2 selfSetUploadId:uploadId];
    NSData * data = <Data of each part>;
    [multipart2 setPartNumber:i + 1];
    [multipart2 setPartData:data];
    UploadPartResult * result = [multipart2 uploadPartWithError:&error];
    [uploadPartResults addObject:result];
}

OSSMultipart * multipart3 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
[multipart3 selfSetUploadId:uploadId];
NSArray * listPartResult = [multipart3 listPartsWithError:&error];
for (UploadPartInfo * info in listPartResult) {
    NSLog(@"UploadPartInfo : %d, %@", [info partNumber], [info etag]);
}

OSSMultipart * multipart4 = [service getOSSMultipartWithBucket:bucket key:uploadObjectKey];
[multipart4 selfSetUploadId:uploadId];
[multipart4 selfSetPartList:uploadPartResults];
[multipart4 completeMultipartUploadWithError:&error];

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