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

有关标准存储、低频访问、归档存储三种存储类型的更多信息,请参考开发指南的存储类型介绍存储类型转换

以下提供了详细的示例代码用于Object存储类型的相互转换。
  • 以下代码用于将Object的存储类型从标准或低频访问转换为归档类型:
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    
    // 本示例中的Bucket与Object需提前创建好, 且Object类型为标准或低频访问存储类型。
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
    
    // 创建OSSClient实例。
    OSSClient ossClient = new OSSClient(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的存储类型从归档转换为低频访问类型:
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    
    // 本示例中的Bucket与Object需提前创建好, 且Object类型为归档存储类型。
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
    
    // 创建OSSClient实例。
    OSSClient ossClient = new OSSClient(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();

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