OSDN Git Service

Create ossClient.go (#574)
[bytom/vapor.git] / vendor / github.com / aliyun / aliyun-oss-go-sdk / sample / put_object.go
1 package sample
2
3 import (
4         "bytes"
5         "encoding/base64"
6         "encoding/json"
7         "fmt"
8         "os"
9         "strings"
10
11         "github.com/aliyun/aliyun-oss-go-sdk/oss"
12 )
13
14 // PutObjectSample illustrates two methods for uploading a file: simple upload and multipart upload.
15 func PutObjectSample() {
16         // Create bucket
17         bucket, err := GetTestBucket(bucketName)
18         if err != nil {
19                 HandleError(err)
20         }
21
22         var val = "花间一壶酒,独酌无相亲。 举杯邀明月,对影成三人。"
23
24         // Case 1: Upload an object from a string
25         err = bucket.PutObject(objectKey, strings.NewReader(val))
26         if err != nil {
27                 HandleError(err)
28         }
29
30         // Case 2: Upload an object whose value is a byte[]
31         err = bucket.PutObject(objectKey, bytes.NewReader([]byte(val)))
32         if err != nil {
33                 HandleError(err)
34         }
35
36         // Case 3: Upload the local file with file handle, user should open the file at first.
37         fd, err := os.Open(localFile)
38         if err != nil {
39                 HandleError(err)
40         }
41         defer fd.Close()
42
43         err = bucket.PutObject(objectKey, fd)
44         if err != nil {
45                 HandleError(err)
46         }
47
48         // Case 4: Upload an object with local file name, user need not open the file.
49         err = bucket.PutObjectFromFile(objectKey, localFile)
50         if err != nil {
51                 HandleError(err)
52         }
53
54         // Case 5: Upload an object with specified properties, PutObject/PutObjectFromFile/UploadFile also support this feature.
55         options := []oss.Option{
56                 oss.Expires(futureDate),
57                 oss.ObjectACL(oss.ACLPublicRead),
58                 oss.Meta("myprop", "mypropval"),
59         }
60         err = bucket.PutObject(objectKey, strings.NewReader(val), options...)
61         if err != nil {
62                 HandleError(err)
63         }
64
65         props, err := bucket.GetObjectDetailedMeta(objectKey)
66         if err != nil {
67                 HandleError(err)
68         }
69         fmt.Println("Object Meta:", props)
70
71         // Case 6: Upload an object with sever side encrpytion kms and kms id specified
72         err = bucket.PutObject(objectKey, strings.NewReader(val), oss.ServerSideEncryption("KMS"), oss.ServerSideEncryptionKeyID(kmsID))
73         if err != nil {
74                 HandleError(err)
75         }
76
77         // Case 7: Upload an object with callback
78         callbackMap := map[string]string{}
79         callbackMap["callbackUrl"] = "http://oss-demo.aliyuncs.com:23450"
80         callbackMap["callbackHost"] = "oss-cn-hangzhou.aliyuncs.com"
81         callbackMap["callbackBody"] = "filename=${object}&size=${size}&mimeType=${mimeType}"
82         callbackMap["callbackBodyType"] = "application/x-www-form-urlencoded"
83
84         callbackBuffer := bytes.NewBuffer([]byte{})
85         callbackEncoder := json.NewEncoder(callbackBuffer)
86         //do not encode '&' to "\u0026"
87         callbackEncoder.SetEscapeHTML(false)
88         err = callbackEncoder.Encode(callbackMap)
89         if err != nil {
90                 HandleError(err)
91         }
92
93         callbackVal := base64.StdEncoding.EncodeToString(callbackBuffer.Bytes())
94         err = bucket.PutObject(objectKey, strings.NewReader(val), oss.Callback(callbackVal))
95         if err != nil {
96                 HandleError(err)
97         }
98
99         // Case 8: Big file's multipart upload. It supports concurrent upload with resumable upload.
100         // multipart upload with 100K as part size. By default 1 coroutine is used and no checkpoint is used.
101         err = bucket.UploadFile(objectKey, localFile, 100*1024)
102         if err != nil {
103                 HandleError(err)
104         }
105
106         // Part size is 100K and 3 coroutines are used
107         err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3))
108         if err != nil {
109                 HandleError(err)
110         }
111
112         // Part size is 100K and 3 coroutines with checkpoint
113         err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
114         if err != nil {
115                 HandleError(err)
116         }
117
118         // Specify the local file path for checkpoint files.
119         // the 2nd parameter of Checkpoint can specify the file path, when the file path is empty, it will upload the directory.
120         err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Checkpoint(true, localFile+".cp"))
121         if err != nil {
122                 HandleError(err)
123         }
124
125         // Case 9: Set the storage classes.OSS provides three storage classes: Standard, Infrequent Access, and Archive.
126         // Supported APIs: PutObject, CopyObject, UploadFile, AppendObject...
127         err = bucket.PutObject(objectKey, strings.NewReader(val), oss.ObjectStorageClass("IA"))
128         if err != nil {
129                 HandleError(err)
130         }
131
132         // Upload a local file, and set the object's storage-class to 'Archive'.
133         err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.ObjectStorageClass("Archive"))
134         if err != nil {
135                 HandleError(err)
136         }
137
138         // Delete object and bucket
139         err = DeleteTestBucketAndObject(bucketName)
140         if err != nil {
141                 HandleError(err)
142         }
143
144         fmt.Println("PutObjectSample completed")
145 }