第一次的go訪問七牛雲端儲存的sdk

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

官網看api,如何使用,對於第一次使用go語言的我略顯吃力,嘿嘿,看了個demo就會了,而且超簡單

package main


import (
    "fmt"
    . "github.com/qiniu/api/conf"
    "github.com/qiniu/api/fop"//這個地方是坑,網上的api。如果下載下來,請改本地地址,這裡是網路地址,而且官網沒提示要引用下面幾個
    "github.com/qiniu/api/io"
    "github.com/qiniu/api/rs"
    "log"
)

func init() {

    ACCESS_KEY = "自己建立帳號密鑰產生的"
    SECRET_KEY = "自己建立帳號密鑰產生的"
}

//GET upload access token
func uptoken(bucketName string) string {
    putPolicy := rs.PutPolicy{
        Scope: bucketName,
        //CallbackUrl: callbackUrl,
        //CallbackBody:callbackBody,
        //ReturnUrl: returnUrl,
        //ReturnBody: returnBody,
        //AsyncOps: asyncOps,
        //EndUser: endUser,
        //Expires: expires,
    }
    return putPolicy.Token(nil)
}

func main() {
    //上傳本地檔案
    upload()

    //5.1 擷取檔案資訊
    //getFileInfo()

    //6.1.1 查看映像屬性
    //imageAttr()

    //5.2 刪除檔案

    //delFile()

//delFile2()
    //imageAttr2()
    //copyFile("needkane", "need", "needcrystal", "needtoo")
    //fmt.Println(downloadUrl("needcrystal.qiniudn.com", "needtoo"))
    //getBatchInfo()
    //highBatch()
    //println(makeViewUrl("http://needkane.qiniudn.com/need"))
    var rc = rsf.New(nil)//這裡注意我這傳入類型rsf.Client,而sdk寫的是引用*rsf.Client;若採用sdk的形式,則調用傳參數時應該是listAll(nil,&rc,"needkane","nee")

    listAll(nil, rc, "needkane", "nee")


}

//6.1.1 查看圖像屬性,可以沒有AK和SK
func imageAttr() {
    var imageUrl = "http://needkane.qiniudn.com/kane2.jpg"
    ii := fop.ImageInfo{}
    infoRet, err := ii.Call(nil, imageUrl)
    if err != nil {
        // 產生錯誤
        log.Println("fop getImageInfo failed:", err)
        return
    }

    log.Println(infoRet.Height, infoRet.Width, infoRet.ColorModel, infoRet.Format)
}

func makeImageInfoUrl(imageUrl string) string {
    ii := fop.ImageInfo{}
    return ii.MakeRequest(imageUrl)
}

//5.2 刪除檔案
func delFile() {
    bucket := "自己建立的空間名稱"
    key := "goupload.jpg"
    var rsCli = rs.New(nil)

    err := rsCli.Delete(nil, bucket, key)
    if err != nil {
        // 產生錯誤
        log.Println("rs.Copy failed:", err)
        return
    }
}

//5.1 擷取檔案資訊
func getFileInfo() {
    var ret rs.Entry
    bucket := "attach"
    key := "goupload.jpg"
    var rsCli = rs.New(nil)

    ret, err := rsCli.Stat(nil, bucket, key)//如果這裡不用:= ,改為=,則必須前面通過var聲明變數ret,err

    if err != nil {
        // 產生錯誤
        log.Println("rs.Stat failed:", err)
        return
    }

    // 處理傳回值
    log.Println(ret)
}

//上傳本地檔案
func upload() {
    uptoken := uptoken("自己建立的空間名稱")
    fmt.Printf("uptoken:%s\n", uptoken)

    var err error
    var ret io.PutRet
    var extra = &io.PutExtra{
    //Params: params,
    //MimeType: mieType,
    //Crc32: crc32,
    //CheckCrc: CheckCrc,
    }

    var key = "kane2.jpg"
    var localFile = "/root/Desktop/kane.jpg"

    // ret 變數用於存取返回的資訊,詳情見 io.PutRet
    // uptoken 為商務服務器產生的上傳口令
    // key 為檔案儲存體的標識
    // localFile 為本地檔案名稱
    // extra 為上傳檔案的額外資訊,詳情見 io.PutExtra,可選
    err = io.PutFile(nil, &ret, uptoken, key, localFile, extra)

    if err != nil {
        //上傳產生錯誤
        log.Print("io.PutFile failed:", err)
        return
    }

    //上傳成功,處理傳回值
    log.Print(ret.Hash, ret.Key)

}

//批量查詢操作

func getBatchInfo() {
    entryPathes := []rs.EntryPath{
        rs.EntryPath{
            Bucket: "needkane",
            Key:    "kane3.jpg",
        },
        rs.EntryPath{
            Bucket: "needcrystal",
            Key:    "needtoo",
        },
    }
    var batchStatRests []rs.BatchStatItemRet
    var rsCli = rs.New(nil)
    batchStatRests, err := rsCli.BatchStat(nil, entryPathes)
    if err != nil {
        log.Println("rs.BatchStat failed", err)
        return
    }
    for time, item := range batchStatRests {
        log.Println(time, ";;;;", item)
    }

}

//聯合多種批處理

func highBatch() {
    ops := []string{
        rs.URIStat("needkane", "need"),
        rs.URICopy("needkane", "kane3.jpg", "needcrystal", "kane"),
        rs.URIDelete("needkane", "kane3.jpg"),
    }
    rets := new([]rs.BatchItemRet)
    var rsCli = rs.New(nil)
    err := rsCli.Batch(nil, rets, ops)
    if err != nil {
        log.Println("rs.Batch failed:", err)
        return
    }
    for time, ret := range *rets {
        log.Println(time, "::", ret.Code, ret.Error)
    }
}

//預覽功能
func makeViewUrl(imageUrl string) string {
    /*    var view = fop.ImageView{
        //Mode int      // 縮減模式
        Width:   1000,  // Width = 0 表示不限定寬度
        Height:  1200,  // Height = 0 表示不限定高度
        Quality: 100,   // 品質, 1-100
        Format:  "gif", // 輸出格式,如jpg, gif, png, tif等等
    }*/
    var view = fop.ImageView{}
    view.Height = 100
    view.Width = 500
    view.Quality = 100
    return view.MakeRequest(imageUrl)
}

//

批量擷取檔案清單


func listAll(l rpc.Logger, rc rsf.Client, bucketName string, prefix string) {
    var entries []rsf.ListItem
    var marker = ""
    var err error
    var limit = 1000
    for err == nil {

        entries, marker, err = rc.ListPrefix(nil, bucketName, prefix, marker, limit)
        for _, item := range entries {
            log.Print("item:", item)
        }
    }

    if err != io.EOF {
        //非預期的錯誤
        log.Print("listAll failed:", err)
    }
}


有個響應遲鈍的bug,這裡調用了api,但是圖形介面上沒有顯示調用的次數

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.