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

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

以下提供了详细的示例代码用于Object存储类型的相互转换。
  • 以下代码用于将Object的存储类型从标准或低频访问转换为归档类型:
    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 创建OSSClient实例。
    	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	bucketName := "<yourBucketName>"
    	objectName := "<yourObjectName>"
    
    	// 获取存储空间。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	//更改文件存储类型,例如修改为归档存储类型。
    	_, err = bucket.CopyObject(objectName, objectName, oss.ObjectStorageClass(oss.StorageArchive))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    }
    					
  • 以下代码用于将Object的存储类型从归档转换为标准类型:
    package main
    
    import (
    	"fmt"
    	"os"
    	"time"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 创建OSSClient实例。
    	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	bucketName := "<yourBucketName>"
    	objectName := "<yourObjectName>"
    
    	// 获取存储空间。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// 检查目标文件是否为归档类型。如果是,则需要先解冻才能更改存储类型。
    	meta, err := bucket.GetObjectDetailedMeta(objectName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	fmt.Println("X-Oss-Storage-Class : ", meta.Get(oss.HTTPHeaderOssStorageClass))
    	if meta.Get(oss.HTTPHeaderOssStorageClass) == string(oss.StorageArchive) {
    		//解冻文件。
    		err = bucket.RestoreObject(objectName)
    		if err != nil {
    			fmt.Println("Error:", err)
    			os.Exit(-1)
    		}
    
    		//等待解冻结束,预计1分钟。
    		meta, err = bucket.GetObjectDetailedMeta(objectName)
    		for meta.Get("X-Oss-Restore") == "ongoing-request=\"true\"" {
    			fmt.Println("X-Oss-Restore:" + meta.Get("X-Oss-Restore"))
    			time.Sleep(1 * time.Second)
    			meta, err = bucket.GetObjectDetailedMeta(objectName)
    		}
    	}
    
    	//更改已解冻文件的存储类型,例如修改为标准存储类型。
    	_, err = bucket.CopyObject(objectName, objectName, oss.ObjectStorageClass(oss.StorageStandard))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    }

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