OSDN Git Service

Create ossClient.go (#574)
[bytom/vapor.git] / vendor / github.com / aliyun / aliyun-oss-go-sdk / sample / append_object.go
1 // Package sample examples
2 package sample
3
4 import (
5         "bytes"
6         "fmt"
7         "io/ioutil"
8         "os"
9         "strconv"
10         "strings"
11
12         "github.com/aliyun/aliyun-oss-go-sdk/oss"
13 )
14
15 // AppendObjectSample shows the append file's usage
16 func AppendObjectSample() {
17         // Create bucket
18         bucket, err := GetTestBucket(bucketName)
19         if err != nil {
20                 HandleError(err)
21         }
22
23         err = bucket.DeleteObject(objectKey)
24
25         var str = "弃我去者,昨日之日不可留。 乱我心者,今日之日多烦忧!"
26         var nextPos int64
27
28         // Case 1: Append a string to the object
29         // The first append position is 0 and the return value is for the next append's position.
30         nextPos, err = bucket.AppendObject(objectKey, strings.NewReader(str), nextPos)
31         if err != nil {
32                 HandleError(err)
33         }
34
35         // Second append
36         nextPos, err = bucket.AppendObject(objectKey, strings.NewReader(str), nextPos)
37         if err != nil {
38                 HandleError(err)
39         }
40
41         // Download
42         body, err := bucket.GetObject(objectKey)
43         if err != nil {
44                 HandleError(err)
45         }
46         data, err := ioutil.ReadAll(body)
47         body.Close()
48         if err != nil {
49                 HandleError(err)
50         }
51         fmt.Println(objectKey, ":", string(data))
52
53         err = bucket.DeleteObject(objectKey)
54         if err != nil {
55                 HandleError(err)
56         }
57
58         // Case 2: Append byte array to the object
59         nextPos = 0
60         // The first append position is 0, and the return value is for the next append's position.
61         nextPos, err = bucket.AppendObject(objectKey, bytes.NewReader([]byte(str)), nextPos)
62         if err != nil {
63                 HandleError(err)
64         }
65
66         // Second append
67         nextPos, err = bucket.AppendObject(objectKey, bytes.NewReader([]byte(str)), nextPos)
68         if err != nil {
69                 HandleError(err)
70         }
71
72         // Download
73         body, err = bucket.GetObject(objectKey)
74         if err != nil {
75                 HandleError(err)
76         }
77         data, err = ioutil.ReadAll(body)
78         body.Close()
79         if err != nil {
80                 HandleError(err)
81         }
82         fmt.Println(objectKey, ":", string(data))
83
84         err = bucket.DeleteObject(objectKey)
85         if err != nil {
86                 HandleError(err)
87         }
88
89         // Case 3: Append a local file to the object
90         fd, err := os.Open(localFile)
91         if err != nil {
92                 HandleError(err)
93         }
94         defer fd.Close()
95
96         nextPos = 0
97         nextPos, err = bucket.AppendObject(objectKey, fd, nextPos)
98         if err != nil {
99                 HandleError(err)
100         }
101
102         // Case 4: Get the next append position by GetObjectDetailedMeta
103         props, err := bucket.GetObjectDetailedMeta(objectKey)
104         nextPos, err = strconv.ParseInt(props.Get(oss.HTTPHeaderOssNextAppendPosition), 10, 64)
105         if err != nil {
106                 HandleError(err)
107         }
108
109         nextPos, err = bucket.AppendObject(objectKey, strings.NewReader(str), nextPos)
110         if err != nil {
111                 HandleError(err)
112         }
113
114         err = bucket.DeleteObject(objectKey)
115         if err != nil {
116                 HandleError(err)
117         }
118
119         // Case 5: Specify the object properties for the first append, including the "x-oss-meta"'s custom metadata.
120         options := []oss.Option{
121                 oss.Expires(futureDate),
122                 oss.ObjectACL(oss.ACLPublicRead),
123                 oss.Meta("myprop", "mypropval")}
124         nextPos = 0
125         fd.Seek(0, os.SEEK_SET)
126         nextPos, err = bucket.AppendObject(objectKey, strings.NewReader(str), nextPos, options...)
127         if err != nil {
128                 HandleError(err)
129         }
130         // Second append
131         fd.Seek(0, os.SEEK_SET)
132         nextPos, err = bucket.AppendObject(objectKey, strings.NewReader(str), nextPos)
133         if err != nil {
134                 HandleError(err)
135         }
136
137         props, err = bucket.GetObjectDetailedMeta(objectKey)
138         if err != nil {
139                 HandleError(err)
140         }
141         fmt.Println("myprop:", props.Get("x-oss-meta-myprop"))
142
143         goar, err := bucket.GetObjectACL(objectKey)
144         if err != nil {
145                 HandleError(err)
146         }
147         fmt.Println("Object ACL:", goar.ACL)
148
149         // Case 6: Set the storage classes.OSS provides three storage classes: Standard, Infrequent Access, and Archive.
150         // Upload a strings, and you can append some strings in the behind of object. but the object is 'Archive' storange class.
151         // An object created with the AppendObject operation is an appendable object. set the object storange-class to 'Archive'.
152         nextPos, err = bucket.AppendObject(appendObjectKey, strings.NewReader("昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,"), nextPos, oss.ObjectStorageClass("Archive"))
153         if err != nil {
154                 HandleError(err)
155         }
156
157         // Delete the object and bucket
158         err = DeleteTestBucketAndObject(bucketName)
159         if err != nil {
160                 HandleError(err)
161         }
162
163         fmt.Println("AppendObjectSample completed")
164 }