OSS提供标准、低频访问、归档和冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景。本文主要介绍如何转换文件(Object)的存储类型。
有关存储类型的更多信息,请参见开发指南的存储类型介绍及存储类型转换。
以下提供了详细的示例代码用于Object存储类型的相互转换。
- 以下代码用于将Object的存储类型从标准或低频访问转换为归档类型:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号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的存储类型从归档转换为低频访问类型:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号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();
各种存储类型的存储费用介绍,请参见计量项和计费项的概述一节。