OSS提供标准、低频访问、归档和冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景。本文主要介绍如何转换文件(Object)的存储类型。
有关存储类型的更多信息,请参见开发指南的存储类型介绍及存储类型转换。
以下提供了详细的示例代码用于Object存储类型的相互转换。
- 以下代码用于将Object的存储类型从标准或低频访问转换为归档类型: 1234567891011121314151617181920212223242526272829
// 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的存储类型从归档转换为低频访问类型: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546
// 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();
各种存储类型的存储费用介绍,请参见计量项和计费项的概述一节。