github.com/aliyun/aliyun-oss-go-sdk@v3.0.2+incompatible/sample/archive.go (about)

     1  package sample
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"time"
     7  
     8  	"github.com/aliyun/aliyun-oss-go-sdk/oss"
     9  )
    10  
    11  // ArchiveSample archives sample
    12  func ArchiveSample() {
    13  	// Create archive bucket
    14  	client, err := oss.New(endpoint, accessID, accessKey)
    15  	if err != nil {
    16  		HandleError(err)
    17  	}
    18  
    19  	err = client.CreateBucket(bucketName, oss.StorageClass(oss.StorageArchive))
    20  	if err != nil {
    21  		HandleError(err)
    22  	}
    23  
    24  	archiveBucket, err := client.Bucket(bucketName)
    25  	if err != nil {
    26  		HandleError(err)
    27  	}
    28  
    29  	// Put archive object
    30  	var val = "花间一壶酒,独酌无相亲。 举杯邀明月,对影成三人。"
    31  	err = archiveBucket.PutObject(objectKey, strings.NewReader(val))
    32  	if err != nil {
    33  		HandleError(err)
    34  	}
    35  
    36  	// Check whether the object is archive class
    37  	meta, err := archiveBucket.GetObjectDetailedMeta(objectKey)
    38  	if err != nil {
    39  		HandleError(err)
    40  	}
    41  
    42  	if meta.Get("X-Oss-Storage-Class") == string(oss.StorageArchive) {
    43  		// Restore object
    44  		err = archiveBucket.RestoreObject(objectKey)
    45  		if err != nil {
    46  			HandleError(err)
    47  		}
    48  
    49  		// Wait for restore completed
    50  		meta, err = archiveBucket.GetObjectDetailedMeta(objectKey)
    51  		for meta.Get("X-Oss-Restore") == "ongoing-request=\"true\"" {
    52  			fmt.Println("x-oss-restore:" + meta.Get("X-Oss-Restore"))
    53  			time.Sleep(1000 * time.Second)
    54  			meta, err = archiveBucket.GetObjectDetailedMeta(objectKey)
    55  		}
    56  	}
    57  
    58  	// Get restored object
    59  	err = archiveBucket.GetObjectToFile(objectKey, localFile)
    60  	if err != nil {
    61  		HandleError(err)
    62  	}
    63  
    64  	// Restore repeatedly
    65  	err = archiveBucket.RestoreObject(objectKey)
    66  
    67  	// Delete object and bucket
    68  	err = DeleteTestBucketAndObject(bucketName)
    69  	if err != nil {
    70  		HandleError(err)
    71  	}
    72  
    73  	fmt.Println("ArchiveSample completed")
    74  }