OSS提供标准、低频访问、归档和冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景。本文主要介绍如何转换文件(Object)的存储类型。

有关存储类型的更多信息,请参见开发指南的存储类型介绍存储类型转换

以下提供了详细的示例代码用于Object存储类型的相互转换。
  • 以下代码用于将Object的存储类型从标准或低频访问转换为归档类型:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // Endpoint以杭州为例,其它Region请按实际情况填写。
     
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
     
    // 本示例中的Bucket与Object需提前创建好, 且Object类型为标准或低频访问存储类型。
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
     
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
     
    // 创建CopyObjectRequest对象。
    CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
     
    // 创建ObjectMetadata对象。
    ObjectMetadata objectMetadata = new ObjectMetadata();
     
    // 封装header,此处以设置存储类型为归档类型为例。
    objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
    request.setNewObjectMetadata(objectMetadata);
     
    // 更改文件存储类型。
    CopyObjectResult result = ossClient.copyObject(request);
     
    // 关闭OSSClient。
    ossClient.shutdown();
  • 以下代码用于将Object的存储类型从归档转换为低频访问类型:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    // Endpoint以杭州为例,其它Region请按实际情况填写。
     
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
     
    // 本示例中的Bucket与Object需提前创建好, 且Object类型为归档存储类型。
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
     
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
     
    // 获取文件元信息。
    ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
     
    // 检查目标文件是否为归档类型。如果是,则需要先解冻才能更改存储类型。
    StorageClass storageClass = objectMetadata.getObjectStorageClass();
    System.out.println("storage type:" + storageClass);
    if (storageClass == StorageClass.Archive) {
        // 解冻文件。
        ossClient.restoreObject(bucketName, objectName);
     
        // 等待解冻完成。
        do {
            Thread.sleep(1000);
            objectMetadata = ossClient.getObjectMetadata(bucketName, objectName); 
        } while (!objectMetadata.isRestoreCompleted());
    }
     
     // 创建CopyObjectRequest对象。
    CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
     
    // 创建ObjectMetadata对象。
    objectMetadata = new ObjectMetadata();
     
    // 封装header,此处以设置存储类型为低频访问类型为例。
    objectMetadata.setHeader("x-oss-storage-class", StorageClass.IA);
    request.setNewObjectMetadata(objectMetadata);
     
    // 更改文件存储类型。
    CopyObjectResult result = ossClient.copyObject(request);
     
    // 关闭OSSClient。
    ossClient.shutdown();

各种存储类型的存储费用介绍,请参见计量项和计费项的概述一节。