| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- package sample
- import (
- "bytes"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "strconv"
- "github.com/aliyun/aliyun-oss-go-sdk/oss"
- )
- // GetObjectSample Get Object Sample
- func GetObjectSample() {
- // 创建Bucket
- bucket, err := GetTestBucket(bucketName)
- if err != nil {
- HandleError(err)
- }
- // 上传对象
- err = bucket.PutObjectFromFile(objectKey, localFile)
- if err != nil {
- HandleError(err)
- }
- // 场景1:下载object存储到ReadCloser,注意需要Close
- body, err := bucket.GetObject(objectKey)
- if err != nil {
- HandleError(err)
- }
- data, err := ioutil.ReadAll(body)
- body.Close()
- if err != nil {
- HandleError(err)
- }
- data = data // use data
- // 场景2:下载object存储到bytes数组,适合小对象
- buf := new(bytes.Buffer)
- body, err = bucket.GetObject(objectKey)
- if err != nil {
- HandleError(err)
- }
- io.Copy(buf, body)
- body.Close()
- // 场景3:下载object存储到本地文件,用户打开文件
- fd, err := os.OpenFile("mynewfile-1.jpg", os.O_WRONLY|os.O_CREATE, 0660)
- if err != nil {
- HandleError(err)
- }
- defer fd.Close()
- body, err = bucket.GetObject(objectKey)
- if err != nil {
- HandleError(err)
- }
- io.Copy(fd, body)
- body.Close()
- // 场景4:下载object存储到本地文件
- err = bucket.GetObjectToFile(objectKey, "mynewfile-2.jpg")
- if err != nil {
- HandleError(err)
- }
- // 场景5:满足约束条件下载,否则返回错误。GetObjectToFile具有相同功能。
- // 修改时间,约束条件满足,执行下载
- body, err = bucket.GetObject(objectKey, oss.IfModifiedSince(pastDate))
- if err != nil {
- HandleError(err)
- }
- body.Close()
- // 修改时间,约束条件不满足,不执行下载
- _, err = bucket.GetObject(objectKey, oss.IfUnmodifiedSince(pastDate))
- if err == nil {
- HandleError(err)
- }
- meta, err := bucket.GetObjectDetailedMeta(objectKey)
- if err != nil {
- HandleError(err)
- }
- md5 := meta.Get(oss.HTTPHeaderEtag)
- // 校验内容,约束条件满足,执行下载
- body, err = bucket.GetObject(objectKey, oss.IfMatch(md5))
- if err != nil {
- HandleError(err)
- }
- body.Close()
- // 校验内容,约束条件不满足,不执行下载
- body, err = bucket.GetObject(objectKey, oss.IfNoneMatch(md5))
- if err == nil {
- HandleError(err)
- }
- // 场景6:指定value的开始结束位置下载object,可以实现断点下载。GetObjectToFile具有相同功能。
- meta, err = bucket.GetObjectDetailedMeta(objectKey)
- if err != nil {
- HandleError(err)
- }
- fmt.Println("Object Meta:", meta[oss.HTTPHeaderContentLength])
- var partSize int64 = 100 * 1024
- objectSize, err := strconv.ParseInt(meta.Get(oss.HTTPHeaderContentLength), 10, 0)
- fd, err = os.OpenFile("myfile.jpg", os.O_WRONLY|os.O_CREATE, 0660)
- if err != nil {
- HandleError(err)
- }
- defer fd.Close()
- for i := int64(0); i < objectSize; i += partSize {
- option := oss.Range(i, oss.GetPartEnd(i, objectSize, partSize))
- body, err := bucket.GetObject(objectKey, option)
- if err != nil {
- HandleError(err)
- }
- io.Copy(fd, body)
- body.Close()
- }
- // 场景7:内容进行 GZIP压缩传输的用户。GetObject/GetObjectToWriter具有相同功能。
- err = bucket.PutObjectFromFile(objectKey, htmlLocalFile)
- if err != nil {
- HandleError(err)
- }
- err = bucket.GetObjectToFile(objectKey, "myhtml.gzip", oss.AcceptEncoding("gzip"))
- if err != nil {
- HandleError(err)
- }
- // 删除object和bucket
- err = DeleteTestBucketAndObject(bucketName)
- if err != nil {
- HandleError(err)
- }
- fmt.Println("GetObjectSample completed")
- }
|