七牛---關於GO SDK的各種Demo

具體可以參考七牛GO SDK的源碼以及官網使用文檔,以下Demo針對V7版本的SDK:
https://github.com/qiniu/go
http://developer.qiniu.com/code/v7/sdk/go.html

文件上傳

簡單上傳

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "qiniupkg.com/api.v7/kodocli"
    "fmt"
)

var (
    //設置上傳到的空間
    bucket = "yourbucket"
)

//構造返回值字段
type PutRet struct {
    Hash    string `json:"hash"`
    Key     string `json:"key"`
}

func main() {
    //初始化AK,SK
    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //創建一個Client
    c := kodo.New(0, nil)

    //設置上傳的策略
    policy := &kodo.PutPolicy{
        Scope:   bucket,
        //設置Token過期時間
        Expires: 3600,
    }
    //生成一個上傳token
    token := c.MakeUptoken(policy);

    //構建一個uploader
    zone := 0
    uploader := kodocli.NewUploader(zone, nil)

    var ret PutRet
    //設置上傳文件的路徑
    filepath := "/Users/dxy/sync/sample2.flv"
    //調用PutFileWithoutKey方式上傳,沒有設置saveasKey以文件的hash命名
    res := uploader.PutFileWithoutKey(nil, &ret, token, filepath, nil)
    //打印返回的信息
    fmt.Println(ret)
    //打印出錯信息
    if res != nil {
        fmt.Println("io.Put failed:", res)
        return
    }   

}

覆蓋上傳

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "qiniupkg.com/api.v7/kodocli"
    "fmt"
)

var (
    //設置上傳到的空間
    bucket = "yourbucket"
    //設置上傳文件的key
    key = "yourdefinekey"
)

//構造返回值字段
type PutRet struct {
    Hash    string `json:"hash"`
    Key     string `json:"key"`
}

func main() {
    //初始化AK,SK
    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //創建一個Client
    c := kodo.New(0, nil)

    //設置上傳的策略
    policy := &kodo.PutPolicy{
        Scope:   bucket+ ":" + key,
        //設置Token過期時間
        Expires: 3600,
    }
    //生成一個上傳token
    token := c.MakeUptoken(policy);

    //構建一個uploader
    zone := 0
    uploader := kodocli.NewUploader(zone, nil)

    var ret PutRet
    //設置上傳文件的路徑
    filepath := "/Users/dxy/sync/sample2.flv"
    //調用PutFile方式上傳,這裏的key需要和上傳指定的key一致
    res := uploader.PutFile(nil, &ret, token, key, filepath, nil)
    //打印返回的信息
    fmt.Println(ret)
    //打印出錯信息
    if res != nil {
        fmt.Println("io.Put failed:", res)
        return
    }   

}

上傳&回調

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "qiniupkg.com/api.v7/kodocli"
    "fmt"
)

var (
    //設置上傳到的空間
    bucket = "yourbucket"
    //設置上傳文件的key
    key = "yourdefinekey"
    //設置CallbackUrl字段
    callbackurl = "http://your.domain.com/callback"
    //設置CallbackBody字段
    callbackbody = `{"key":$(key), "hash":$(etag),"filesize":$(fsize)}`
)

//構造返回值字段
type PutRet struct {
    Hash    string `json:"hash"`
    Key     string `json:"key"`
    Filesize int `json:"filesize"`
}

func main() {
    //初始化AK,SK
    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //創建一個Client
    c := kodo.New(0, nil)

    //設置上傳的策略
    policy := &kodo.PutPolicy{
        Scope:   bucket+ ":" + key,
        //設置Token過期時間
        Expires: 3600,

        CallbackUrl: callbackurl,
        CallbackBody: callbackbody,
    }
    //生成一個上傳token
    token := c.MakeUptoken(policy);

    //構建一個uploader
    zone := 0
    uploader := kodocli.NewUploader(zone, nil)

    var ret PutRet
    //設置上傳文件的路徑
    filepath := "/xxx/xxx/sample.flv"
    //調用PutFile方式上傳,這裏的key需要和上傳指定的key一致
    res := uploader.PutFile(nil, &ret, token, key, filepath, nil)
    //打印返回的信息
    fmt.Println(ret)
    //打印出錯信息
    if res != nil {
        fmt.Println("io.Put failed:", res)
        return
    }   

}

上傳&預轉持續化(以視頻轉碼爲例)

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "qiniupkg.com/api.v7/kodocli"
    "fmt"
)

var (
    //設置上傳到的空間
    bucket = "yourbucket"
    //設置上傳文件的key
    key = "yourdefinekey"
    //設置轉碼參數
    fops = "avthumb/mp4/s/640x360/vb/1.25m"
    //設置轉碼用的隊列
    pipeline = "yourpipeline"
)

//構造返回值字段
type PutRet struct {
    Hash    string `json:"hash"`
    Key     string `json:"key"`
    PersistentId  string `json:"persistentId"`
}

func main() {
    //初始化AK,SK
    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //創建一個Client
    c := kodo.New(0, nil)

    //設置上傳的策略
    policy := &kodo.PutPolicy{
        Scope:   bucket+ ":" + key,
        //設置Token過期時間
        Expires: 3600,
        InsertOnly: 1,
        PersistentOps: fops,
        PersistentPipeline: pipeline,
    }
    //生成一個上傳token
    token := c.MakeUptoken(policy)

    //構建一個uploader
    zone := 0
    uploader := kodocli.NewUploader(zone, nil)

    var ret PutRet
    //設置上傳文件的路徑
    filepath := "/xxx/xxx/sample.flv"
    //調用PutFile方式上傳,這裏的key需要和上傳指定的key一致
    res := uploader.PutFile(nil, &ret, token, key, filepath, nil)
    //打印返回的信息
    fmt.Println(ret)
    //打印出錯信息
    if res != nil {
        fmt.Println("io.Put failed:", res)
        return
    }   

}

可以看到上傳成功後的回調行爲主要是有上傳 Token 中的 policy 來指定。其中policy可以指定的行爲不止這些,具體可以參考籤權類中的policy字段。

文件下載

生成下載鏈接

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
)

var(
    //指定私有空間的域名
    domain = "xxxx.com2.z0.glb.qiniucdn.com"
    //指定文件的key
    key = "xxx.jpg"
)

//調用封裝好的downloadUrl方法生成一個下載鏈接
func downloadUrl(domain, key string) string {
    //調用MakeBaseUrl()方法將domain,key處理成http://domain/key的形式
    baseUrl := kodo.MakeBaseUrl(domain, key)
    policy := kodo.GetPolicy{}
    //生成一個client對象
    c := kodo.New(0, nil)
    //調用MakePrivateUrl方法返回url
    return c.MakePrivateUrl(baseUrl, &policy)
}

func main() {
    //初始化AK,SK
    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"
    //打印出下載鏈接
    println(downloadUrl(domain, key))
}

空間資源的管理

獲取文件的信息

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "fmt"
)

var (
    //設置需要操作的空間
    bucket = "yourbucket"
    //設置需要操作的文件的key
    key = "yourkey"
)

func main() {

    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //new一個Bucket管理對象
    c := kodo.New(0, nil)
    p := c.Bucket(bucket)

    //調用Stat方法獲取文件的信息
    entry, err := p.Stat(nil, key)
    //打印列取的信息
    fmt.Println(entry)
    //打印出錯時返回的信息
    if err != nil {
        fmt.Println(err)
    }
}

移動單個文件

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "fmt"
)

var (
    //設置需要操作的空間
    bucket = "yourbucket"
    //設置需要操作的文件的key
    key = "yourkey"
    //設置移動後文件的文件名
    movekey = "movekey"
)

func main() {

    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //new一個Bucket管理對象
    c := kodo.New(0, nil)
    p := c.Bucket(bucket)

    //調用Move方法移動文件
    res := p.Move(nil, key, movekey)

    //打印返回值以及出錯信息
    if res == nil {
        fmt.Println("Move success")
    }else {
        fmt.Println("Move failed:",res)
    }
}

複製單個文件

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "fmt"
)

var (
    //設置需要操作的空間
    bucket = "yourbucket"
    //設置需要操作的文件的key
    key = "yourkey"
    //設置複製後文件的文件名
    copykey = "yourcopykey"
)

func main() {

    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //new一個Bucket管理對象
    c := kodo.New(0, nil)
    p := c.Bucket(bucket)

    //調用Copy方法移動文件
    res := p.Copy(nil, key, copykey)

    //打印返回值以及出錯信息
    if res == nil {
        fmt.Println("Copy success")
    }else {
        fmt.Println("Copy failed:",res)
    }
}

刪除單個文件

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "fmt"
)

var (
    //設置需要操作的空間
    bucket = "yourbucket"
    //設置需要操作的文件的key
    key = "yourkey"
)

func main() {

    conf.ACCESS_KEY = "ACCESS_KEY"
    conf.SECRET_KEY = "SECRET_KEY"

    //new一個Bucket管理對象
    c := kodo.New(0, nil)
    p := c.Bucket(bucket)

    //調用Delete方法刪除文件
    res := p.Delete(nil, key)
    //打印返回值以及出錯信息
    if res == nil {
        fmt.Println("Delete success")
    }else {
        fmt.Println(res)
    }
}

Fetch抓取文件

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "fmt"
)

var (
    //指定需要抓取到的空間
    bucket = "xxxx"
    //指定需要抓取的文件的url,必須是公網上面可以訪問到的
    target_url = "xxxx"
    //指定抓取保存到空間的文件的key指
    key = "test.jpg"
)

func main() {

    conf.ACCESS_KEY = "xxxx"
    conf.SECRET_KEY = "xxxx"

    //new一個Bucket對象
    c := kodo.New(0, nil)
    p := c.Bucket(bucket)

    //調用Fetch方法
    err := p.Fetch(nil, key, target_url)
    if err != nil {
        fmt.Println("bucket.Fetch failed:", err)
    }else {
        fmt.Println("fetch success")
    }
}

List列舉

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "fmt"
)

func main() {

    conf.ACCESS_KEY = "xxxx"
    conf.SECRET_KEY = "xxxx"

    //new一個Bucket對象
    c := kodo.New(0, nil)
    p := c.Bucket("xxx")

    //調用List方法,第二個參數是前綴,第三個參數是delimiter,第四個參數是marker,第五個參數是列舉條數
    //可以參考 https://github.com/qiniu/api.v7/blob/f956f458351353a3a75a3a519fed4e3069f14df0/kodo/bucket.go#L131
    ListItem ,_,_, err := p.List(nil, "photo/", "","",100)

    if err == nil {
        fmt.Println("List success")
    }else {
        fmt.Println("List failed:",err)
    }

    //循環遍歷每個操作的返回結果
    for _, item := range ListItem {
        fmt.Println(item.Key, item.Fsize)
    }

}

batch批量操作

package main

import (
    "qiniupkg.com/api.v7/kodo"
    "qiniupkg.com/api.v7/conf"
    "fmt"
)

func main() {

    //new一個數組,需要批量操作的數組
    entryPairs := []kodo.KeyPair {
        kodo.KeyPair{
            Src: "xxx.jpg",
            Dest: "xxxx.jpg",
        },kodo.KeyPair{
            Src: "xxxxx.jpg",
            Dest: "xxxxx.jpg",
        },
    }

    conf.ACCESS_KEY = "xxxx"
    conf.SECRET_KEY = "xxxx"

    //new一個Bucket對象
    c := kodo.New(0, nil)
    p := c.Bucket("xxxx")

    //調用BatchCopy方法
    batchCopyRets, err := p.BatchCopy(nil, entryPairs...)

    if err == nil {
        fmt.Println("Move success")
    }else {
        fmt.Println("Move failed:",err)
    }

    //循環遍歷每個操作的返回結果
    for _, item := range batchCopyRets {
        fmt.Println(item.Code, item.Error)
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章