Object Storage Service (OSS) ofrece las siguientes clases de almacenamiento para cubrir diversos escenarios, desde datos frecuentes hasta datos fríos: Standard, Infrequent Access (IA), Archive, Cold Archive y Deep Cold Archive. Este tema describe cómo convertir la clase de almacenamiento de un objeto.
Notas de uso
Antes de ejecutar el código de ejemplo de este tema, debe crear una instancia de OSSClient mediante métodos como el uso de un nombre de dominio personalizado o Security Token Service (STS). Para obtener más información, consulte Initialization.
Ejemplos
-
Conversión de la clase de almacenamiento de un objeto de Standard o IA a Archive
El siguiente código de ejemplo muestra cómo convertir la clase de almacenamiento de un objeto llamado exampleobject.txt de Standard o IA a Archive. En este ejemplo, el objeto se almacena en el directorio raíz de un bucket llamado examplebucket.
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new]; copy.sourceBucketName = @"examplebucket"; copy.sourceObjectKey = @"exampleobject.txt"; copy.bucketName = @"examplebucket"; copy.objectKey = @"exampleobject.txt"; // Set the storage class of the exampleobject.txt object to Archive. copy.objectMeta = @{@"x-oss-storage-class" : @"Archive"}; OSSTask * task = [client copyObject:copy]; [task continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"copy object success!"); } else { NSLog(@"copy object failed, error: %@" , task.error); } return nil; }]; // Implement synchronous blocking to wait for the task to complete. // [task waitUntilFinished]; -
Conversión de la clase de almacenamiento de un objeto de Archive, Cold Archive o Deep Cold Archive a IA
El siguiente código de ejemplo muestra cómo convertir la clase de almacenamiento de un objeto llamado exampleobject.txt de Archive, Cold Archive o Deep Cold Archive a IA. En este ejemplo, el objeto se almacena en el directorio raíz de un bucket llamado examplebucket.
NSString *bucketName = @"examplebucket"; NSString *objectKey = @"exampleobject.txt"; // The following lines check whether the storage class of the object is Archive. If the storage class of the object is Archive, you must restore the object before you can convert the storage class of the object. // To check whether the storage class of the object is Cold Archive or Deep Cold Archive, replace isArchived with isColdArchived or isDeepColdArchived. __block bool isArchived = false; OSSHeadObjectRequest *headRq = [OSSHeadObjectRequest new]; headRq.bucketName = bucketName; headRq.objectKey = objectKey; [[[client headObject:headRq] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { OSSHeadObjectResult *headRs = task.result; isArchived = [headRs.httpResponseHeaderFields[@"x-oss-storage-class"] isEqualToString:@"Archive"]; } else { NSLog(@"head object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; if (isArchived) { // Restore the object. OSSRestoreObjectRequest *restoreRequest = [OSSRestoreObjectRequest new]; restoreRequest.bucketName = bucketName; restoreRequest.objectKey = objectKey; [[[client restoreObject:restoreRequest] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { NSLog(@"restore object success!"); } else { NSLog(@"restore object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; // Wait until the object is restored. __block bool isRestored = false; do { sleep(1); headRq = [OSSHeadObjectRequest new]; headRq.bucketName = bucketName; headRq.objectKey = objectKey; [[[client headObject:headRq] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { OSSHeadObjectResult *headRs = task.result; isRestored = (headRs.httpResponseHeaderFields[@"x-oss-restore"] != nil && ![headRs.httpResponseHeaderFields[@"x-oss-restore"] isEqualToString:@"ongoing-request=\"true\""]); } else { NSLog(@"head object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; } while (!isRestored); } // Set the storage class of the exampleobject.txt object to IA. OSSCopyObjectRequest *copy = [OSSCopyObjectRequest new]; copy.bucketName = bucketName; copy.objectKey = objectKey; copy.sourceBucketName = bucketName; copy.sourceObjectKey = objectKey; copy.objectMeta = @{@"x-oss-storage-class": @"IA"}; [[[client copyObject:copy] continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"copy object success!"); } else { NSLog(@"copy object failed, error: %@" , task.error); } return nil; }] waitUntilFinished];
Referencias
Para obtener más información sobre la operación de API que puede llamar para convertir la clase de almacenamiento de un objeto, consulte CopyObject.
Para obtener más información sobre cómo inicializar una instancia de OSSClient, consulte Initialization.