帮助与文档

我们为你提供丰富、详尽的使用指南以及产品文档

Go SDK

QingStor Go SDK 已在 GitHub 开源,下文为简要使用文档。更多详细信息请参见 GitHub 项目页面 ,和Godoc

安装

可以直接使用 go get 安装:

> go get -u github.com/yunify/qingstor-sdk-go

安装之后,可以查看命令行的文档

> godoc github.com/yunify/qingstor-sdk-go

也可以访问 GitHub 的 release 页面 下载压缩包

要求使用 Go 1.5 或以上的 Go 版本,如果版本是 1.5 还需要设置 GO15VENDOREXPERIMENT=1

快速开始

使用 SDK 之前请先在 青云控制台 申请 access key 。

初始化服务

发起请求前首先建立需要初始化服务:

import (
    "github.com/yunify/qingstor-sdk-go/config"
    qs "github.com/yunify/qingstor-sdk-go/service"
    qsErrors "github.com/yunify/qingstor-sdk-go/request/errors"
)

configuration, _ := config.New("ACCESS_KEY_ID", "SECRET_ACCESS_KEY")
qsService, _ := qs.Init(configuration)

上面代码初始化了一个 QingStor Service

获取账户下的 Bucket 列表

qsOutput, _ := qsService.ListBuckets(nil)

// Print the HTTP status code.
// Example: 200
fmt.Println(qs.IntValue(qsOutput.StatusCode))

// Print the bucket count.
// Example: 5
fmt.Println(qs.IntValue(qsOutput.Count))

创建 Bucket

初始化并创建 Bucket, 需要指定 Bucket 名称和所在 Zone:

bucket, _ := qsService.Bucket("test-bucket", "pek3a")
putBucketOutput, _ := bucket.Put()

取 Bucket 中存储的 Object 列表

bOutput, err := bucket.ListObjects(nil)

// Print the HTTP status code.
// Example: 200
fmt.Println(qs.IntValue(bOutput.StatusCode))

// Print the key count.
// Example: 0
fmt.Println(len(bOutput.Keys))

创建一个 Object

例如上传一张屏幕截图:

// Open file
if file, err := os.Open("/tmp/Screenshot.jpg"); err != nil {
    panic(err)
}
defer file.Close()

// Put object
oOutput, err := bucket.PutObject("Screenshot.jpg", &service.PutObjectInput{Body: file})

// 所有 >= 400 的 HTTP 返回码都被视作错误
if err != nil {
    // Example: QingStor Error: StatusCode 403, Code "permission_denied"...
    fmt.Println(err)
} else {
    // Print the HTTP status code.
    // Example: 201
    fmt.Println(qs.IntValue(oOutput.StatusCode))
}

下载一个文件

getOutput, err := bucket.GetObject(
        "Screenshot.jpg",
        &service.GetObjectInput{},
)

if err != nil {
        // Example: QingStor Error: StatusCode 404, Code "object_not_exists"...
        fmt.Println(err)
        if qsErr, ok := err.(*qsErrors.QingStorError); ok {
                println(qsErr.StatusCode, qsErr.Code)
        }
} else {
        defer getOutput.Close() // 一定记得关闭GetObjectOutput, 否则容易造成链接泄漏
        f, err := os.OpenFile("download_screenshot.jpg", os.O_CREATE|os.O_WRONLY, 0600)
        if err != nil {
            panic(err)
        }
        defer f.Close()
        // Download with 32k temporary buffer
        err = io.CopyBuffer(f, getOutput.Body, make([]byte, 32*1024))
        if err != nil {
            panic(err)
        }
}

删除一个 Object

oOutput, _ := bucket.DeleteObject("Screenshot.jpg")

// Print the HTTP status code.
// Example: 204
fmt.Println(qs.IntValue(oOutput.StatusCode))

设置 Bucket ACL

bACLOutput, _ := bucket.PutACL(&service.PutBucketACLInput{
    ACL: []*service.ACLType{
        {
            Grantee: &service.GranteeType{
                Type: qs.String("user"),
                ID:   qs.String("usr-xxxxxxxx"),
            },
            Permission: qs.String("FULL_CONTROL"),
        },
    },
})

// Print the HTTP status code.
// Example: 200
fmt.Println(qs.IntValue(bACLOutput.StatusCode))

分段上传

初始化分段上传

initOutput, err := bucket.InitiateMultipartUpload(
    "QingCloudInsight.mov",
    &service.InitiateMultipartUploadInput{
        ContentType: qs.String("video/quicktime"),
    },
)

// Print the HTTP status code.
// Example: 200
fmt.Println(qs.IntValue(initOutput.StatusCode))

// Print the upload ID.
// Example: "9d37dd6ccee643075ca4e597ad65655c"
fmt.Println(qs.StringValue(initOutput.UploadID))

上传两个分段

uploadOutput, err := bucket.UploadMultipart(
    "QingCloudInsight.mov",
    &service.UploadMultipartInput{
        UploadID:   qs.String(initOutput.UploadID),
        PartNumber: qs.Int(0),
        ContentMD5: qs.String(md5String0),
        Body:       file0,
    },
)

// Print the HTTP status code.
// Example: 201
fmt.Println(qs.IntValue(uploadOutput.StatusCode))

uploadOutput, err = bucket.UploadMultipart(
    "QingCloudInsight.mov",
    &service.UploadMultipartInput{
        UploadID:   qs.String(initOutput.UploadID),
        PartNumber: qs.Int(1),
        ContentMD5: qs.String(md5String1),
        Body:        file1,
    },
)

完成分段上传

completeOutput, err := bucket.CompleteMultipartUpload(
    "QingCloudInsight.mov",
    &service.CompleteMultipartUploadInput{
        UploadID:    qs.String(initOutput.UploadID),
        ObjectParts: []*service.ObjectPart{
            {PartNumber: qs.Int(0)},
            {PartNumber: qs.Int(1)},
        },
    },
)

// Print the HTTP status code.
// Example: 200
fmt.Println(qs.IntValue(completeOutput.StatusCode))

取消分段上传

abrtOutput, err := bucket.AbortMultipartUpload(
    "QingCloudInsight.mov"
    &service.AbortMultipartUploadInput{
        UploadID:  qs.String(initOutput.UploadID),
    },
)

// Print the error message.
// Example: QingStor Error: StatusCode 400, Code...
fmt.Println(err)