11 "github.com/aliyun/aliyun-oss-go-sdk/oss"
14 // PutObjectSample illustrates two methods for uploading a file: simple upload and multipart upload.
15 func PutObjectSample() {
17 bucket, err := GetTestBucket(bucketName)
22 var val = "花间一壶酒,独酌无相亲。 举杯邀明月,对影成三人。"
24 // Case 1: Upload an object from a string
25 err = bucket.PutObject(objectKey, strings.NewReader(val))
30 // Case 2: Upload an object whose value is a byte[]
31 err = bucket.PutObject(objectKey, bytes.NewReader([]byte(val)))
36 // Case 3: Upload the local file with file handle, user should open the file at first.
37 fd, err := os.Open(localFile)
43 err = bucket.PutObject(objectKey, fd)
48 // Case 4: Upload an object with local file name, user need not open the file.
49 err = bucket.PutObjectFromFile(objectKey, localFile)
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"),
60 err = bucket.PutObject(objectKey, strings.NewReader(val), options...)
65 props, err := bucket.GetObjectDetailedMeta(objectKey)
69 fmt.Println("Object Meta:", props)
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))
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"
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)
93 callbackVal := base64.StdEncoding.EncodeToString(callbackBuffer.Bytes())
94 err = bucket.PutObject(objectKey, strings.NewReader(val), oss.Callback(callbackVal))
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)
106 // Part size is 100K and 3 coroutines are used
107 err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3))
112 // Part size is 100K and 3 coroutines with checkpoint
113 err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
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"))
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"))
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"))
138 // Delete object and bucket
139 err = DeleteTestBucketAndObject(bucketName)
144 fmt.Println("PutObjectSample completed")