OSS は、オブジェクトの直接的な名前変更をサポートしていません。 同じバケット内のオブジェクトの名前を変更するには、CopyObject 操作を呼び出してソースオブジェクトを宛先オブジェクトにコピーします。 次に、DeleteObject 操作を呼び出してソースオブジェクトを削除します。
注意事項
このトピックのサンプルコードを実行する前に、カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する必要があります。 詳細については、「初期化 (iOS SDK)」をご参照ください。
説明バケットのリージョンは、初期化設定で指定されたエンドポイントのリージョンによって決まります。
サンプルコード
次のコードは、examplebucket バケット内のオブジェクトの名前を srcobject.txt から destobject.txt に変更する方法を示しています。
// バケット名を指定します。
NSString *bucketName = @"examplebucket";
// ソースオブジェクトの完全なパスを指定します。 バケット名は含めないでください。 例:srcobject.txt。
NSString *sourceObjectKey = @"sourceObjectKey";
// 宛先オブジェクトの完全なパスを指定します。 バケット名は含めないでください。 例:destobject.txt。
NSString *objectKey = @"destobject.txt";
[[[OSSTask taskWithResult:nil] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
// srcobject.txt オブジェクトを同じバケット内の destobject.txt にコピーします。
OSSCopyObjectRequest *copyRequest = [OSSCopyObjectRequest new];
copyRequest.bucketName = bucketName;
copyRequest.sourceBucketName = bucketName;
copyRequest.sourceObjectKey = sourceObjectKey;
copyRequest.objectKey = objectKey;
OSSTask *copyTask = [client copyObject:copyRequest];
[copyTask waitUntilFinished];
if (copyTask.error) {
return copyTask;
}
// srcobject.txt オブジェクトを削除します。
OSSDeleteObjectRequest *deleteObject = [OSSDeleteObjectRequest new];
deleteObject.bucketName = bucketName;
deleteObject.objectKey = sourceObjectKey;
OSSTask *deleteTask = [client deleteObject:deleteObject];
[deleteTask waitUntilFinished];
if (deleteTask.error) {
return deleteTask;
}
return nil;
}] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
if (task.error) {
NSLog(@"rename fail! error: %@", task.error);
} else {
NSLog(@"rename success!");
}
return nil;
}];説明
OSS は、フォルダーの直接的な名前変更をサポートしていません。 フォルダーの名前を変更するには、同じメソッドを適用して、フォルダー内の各サブディレクトリとオブジェクトの名前を変更します。
関連ドキュメント
ファイルの名前変更に使用される API 操作の詳細については、「CopyObject」および「DeleteObject」をご参照ください。