github.com/aliyun/aliyun-oss-go-sdk@v3.0.2+incompatible/sample/append_object.go (about) 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 }