OSDN Git Service

Create ossClient.go (#574)
[bytom/vapor.git] / vendor / github.com / aliyun / aliyun-oss-go-sdk / sample / copy_object.go
1 package sample
2
3 import (
4         "fmt"
5
6         "github.com/aliyun/aliyun-oss-go-sdk/oss"
7 )
8
9 // CopyObjectSample shows the copy files usage
10 func CopyObjectSample() {
11         // Create a bucket
12         bucket, err := GetTestBucket(bucketName)
13         if err != nil {
14                 HandleError(err)
15         }
16
17         // Create an object
18         err = bucket.PutObjectFromFile(objectKey, localFile)
19         if err != nil {
20                 HandleError(err)
21         }
22
23         // Case 1: Copy an existing object
24         var descObjectKey = "descobject"
25         _, err = bucket.CopyObject(objectKey, descObjectKey)
26         if err != nil {
27                 HandleError(err)
28         }
29
30         // Case 2: Copy an existing object to another existing object
31         _, err = bucket.CopyObject(objectKey, descObjectKey)
32         if err != nil {
33                 HandleError(err)
34         }
35
36         err = bucket.DeleteObject(descObjectKey)
37         if err != nil {
38                 HandleError(err)
39         }
40
41         // Case 3: Copy file with constraints. When the constraints are met, the copy executes. otherwise the copy does not execute.
42         // constraints are not met, copy does not execute
43         _, err = bucket.CopyObject(objectKey, descObjectKey, oss.CopySourceIfModifiedSince(futureDate))
44         if err == nil {
45                 HandleError(err)
46         }
47         fmt.Println("CopyObjectError:", err)
48         // Constraints are met, the copy executes
49         _, err = bucket.CopyObject(objectKey, descObjectKey, oss.CopySourceIfUnmodifiedSince(futureDate))
50         if err != nil {
51                 HandleError(err)
52         }
53
54         // Case 4: Specify the properties when copying. The MetadataDirective needs to be MetaReplace
55         options := []oss.Option{
56                 oss.Expires(futureDate),
57                 oss.Meta("myprop", "mypropval"),
58                 oss.MetadataDirective(oss.MetaReplace)}
59         _, err = bucket.CopyObject(objectKey, descObjectKey, options...)
60         if err != nil {
61                 HandleError(err)
62         }
63
64         meta, err := bucket.GetObjectDetailedMeta(descObjectKey)
65         if err != nil {
66                 HandleError(err)
67         }
68         fmt.Println("meta:", meta)
69
70         // Case 5: When the source file is the same as the target file, the copy could be used to update metadata
71         options = []oss.Option{
72                 oss.Expires(futureDate),
73                 oss.Meta("myprop", "mypropval"),
74                 oss.MetadataDirective(oss.MetaReplace)}
75
76         _, err = bucket.CopyObject(objectKey, objectKey, options...)
77         if err != nil {
78                 HandleError(err)
79         }
80         fmt.Println("meta:", meta)
81
82         // Case 6: Big file's multipart copy. It supports concurrent copy with resumable upload
83         // copy file with multipart. The part size is 100K. By default one routine is used without resumable upload
84         err = bucket.CopyFile(bucketName, objectKey, descObjectKey, 100*1024)
85         if err != nil {
86                 HandleError(err)
87         }
88
89         // Part size is 100K and three coroutines for the concurrent copy
90         err = bucket.CopyFile(bucketName, objectKey, descObjectKey, 100*1024, oss.Routines(3))
91         if err != nil {
92                 HandleError(err)
93         }
94
95         // Part size is 100K and three coroutines for the concurrent copy with resumable upload
96         err = bucket.CopyFile(bucketName, objectKey, descObjectKey, 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
97         if err != nil {
98                 HandleError(err)
99         }
100
101         // Specify the checkpoint file path. If the checkpoint file path is not specified, the current folder is used.
102         err = bucket.CopyFile(bucketName, objectKey, descObjectKey, 100*1024, oss.Checkpoint(true, localFile+".cp"))
103         if err != nil {
104                 HandleError(err)
105         }
106
107         // Case 7: Set the storage classes.OSS provides three storage classes: Standard, Infrequent Access, and Archive.
108         // Copy a object in the same bucket, and set object's storage-class to Archive.
109         _, err = bucket.CopyObject(objectKey, objectKey+"DestArchive", oss.ObjectStorageClass("Archive"))
110         if err != nil {
111                 HandleError(err)
112         }
113
114         // Case 8: Copy object with tagging, the value of tagging directive is REPLACE
115         tag1 := oss.Tag{
116                 Key:   "key1",
117                 Value: "value1",
118         }
119         tag2 := oss.Tag{
120                 Key:   "key2",
121                 Value: "value2",
122         }
123         tagging := oss.Tagging{
124                 Tags: []oss.Tag{tag1, tag2},
125         }
126         _, err = bucket.CopyObject(objectKey, objectKey+"WithTagging", oss.SetTagging(tagging), oss.TaggingDirective(oss.TaggingReplace))
127         if err != nil {
128                 HandleError(err)
129         }
130
131         // Delete object and bucket
132         err = DeleteTestBucketAndObject(bucketName)
133         if err != nil {
134                 HandleError(err)
135         }
136
137         fmt.Println("CopyObjectSample completed")
138 }