初識GO SDK

ice_moss發表於2022-04-08

一、下載與安裝

環境依賴

Golang:用於下載和安裝 Go 編譯執行環境,請前往 Golang 官網進行下載。

安裝SDK

執行以下命令COS GO SDK

go get -u github.com/tencentyun/cos-go-sdk-v5
二、開始使用

在本文章中我們將為您介紹如何使用COS GO SDK完成一些基本操作,如初始化客戶端、建立儲存桶、查詢儲存桶列表、上傳物件、查詢物件列表、下載物件和刪除物件。

1. 初始化

使用 COS 域名生成 COS GO 客戶端 Client 結構。

func NewClient(uri *BaseURL, httpClient *http.Client) *Client

這是BaseURL結構體:

// BaseURL 訪問各 API 所需的基礎 URL
type BaseURL struct {
    // 訪問 bucket, object 相關 API 的基礎 URL(不包含 path 部分): https://examplebucket-1250000000.cos.<Region>.myqcloud.com
    BucketURL *url.URL
    // 訪問 service API 的基礎 URL(不包含 path 部分): https://cos.<Region>.myqcloud.com
    ServiceURL *url.URL
    // 訪問 Batch API 的基礎 URL (不包含 path 部分): https://<UIN>.cos-control.<Region>.myqcloud.com
    BatchURL *url.URL
    // 訪問 CI 的基礎 URL (不包含 path 部分): https://examplebucket-1250000000.ci.<Region>.myqcloud.com
    CIURL *url.URL
}

下面是請求例項這是直接去騰訊官網找到的:

  1. 使用永久秘鑰

    // 將 examplebucket-1250000000 和 COS_REGION 修改為使用者真實的資訊
    // 儲存桶名稱,由bucketname-appid 組成,appid必須填入,可以在COS控制檯檢視儲存桶名稱。https://console.cloud.tencent.com/cos5/bucket
    // COS_REGION 可以在控制檯檢視,https://console.cloud.tencent.com/cos5/bucket, 關於地域的詳情見 https://cloud.tencent.com/document/product/436/6224
    u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
    // 用於Get Service 查詢,預設全地域 service.cos.myqcloud.com
    su, _ := url.Parse("https://cos.COS_REGION.myqcloud.com")
    b := &cos.BaseURL{BucketURL: u, ServiceURL: su}
    // 1.永久金鑰
    client := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  "SECRETID",  // 替換為使用者的 SecretId,請登入訪問管理控制檯進行檢視和管理,https://console.cloud.tencent.com/cam/capi
            SecretKey: "SECRETKEY", // 替換為使用者的 SecretKey,請登入訪問管理控制檯進行檢視和管理,https://console.cloud.tencent.com/cam/capi
        },
    })
  1. 使用臨時秘鑰

    // 將 examplebucket-1250000000 和 COS_REGION 修改為真實的資訊
    // 儲存桶名稱,由bucketname-appid 組成,appid必須填入,可以在COS控制檯檢視儲存桶名稱。https://console.cloud.tencent.com/cos5/bucket
    // COS_REGION 可以在控制檯檢視,https://console.cloud.tencent.com/cos5/bucket, 關於地域的詳情見 https://cloud.tencent.com/document/product/436/6224
    u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
    b := &cos.BaseURL{BucketURL: u}
    // 2.臨時金鑰
    client := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            // 如果使用臨時金鑰需要填入,臨時金鑰生成和使用指引參見https://cloud.tencent.com/document/product/436/14048
            SecretID:     "SECRETID",
            SecretKey:    "SECRETKEY",
            SessionToken: "SECRETTOKEN",
        },
    })
    if client != nil {
        // 呼叫 COS 請求
    }
  1. 設定域名

    透過修改 BaseURL,可以直接使用自定義域名或者全球加速域名訪問 COS。

    // 使用全球加速域名訪問COS
    u, _ := url.Parse("http://<BucketName-APPID>.cos.accelerate.myqcloud.com")
    b := &cos.BaseURL{BucketURL: u}
    // 2.臨時金鑰
    client := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            // 如果使用臨時金鑰需要填入,臨時金鑰生成和使用指引參見https://cloud.tencent.com/document/product/436/14048
            SecretID:     "SECRETID",
            SecretKey:    "SECRETKEY",
            SessionToken: "SECRETTOKEN",
        },
    })
2. 建立儲存桶
package main

import (
    "context"
    "net/http"
    "net/url"
    "github.com/tencentyun/cos-go-sdk-v5"
)

func main() {
    //建立儲存桶,連線我們的騰訊雲端儲存桶:https://yourname-1309975315.cos.ap-shanghai.myqcloud.com
    u, err := url.Parse("http://<BucketName-APPID>.cos.accelerate.myqcloud.com")
    if err != nil {
        panic(err)
    }
    //秘鑰,該秘鑰無效,需要更換自己的秘鑰
    secID := "AKIDe8Ldfnjd0LQGrtgDUdfjkcnfdhfidf"
    secKey := "4rdffcKdfndlx3wax4vVoqbdfjihidfnkdff"
    b := &cos.BaseURL{BucketURL: u}
    c := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  secID,
            SecretKey: secKey,
        },
    })

    _, err = c.Bucket.Put(context.Background(), nil)
    if err != nil {
        panic(err)
    }

}                      
3. 查詢儲存列表
package main

import (
    "context"
    "fmt"
    "net/http"

    "github.com/tencentyun/cos-go-sdk-v5"
)

func main() {
    secID := "AKIDe8Ldfnjd0LQGrtgDUdfjkcnfdhfidf"
    secKey := "4rdffcKdfndlx3wax4vVoqbdfjihidfnkdff"

    c := cos.NewClient(nil, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  secID,
            SecretKey: secKey,
        },
    })

    s, _, err := c.Service.Get(context.Background())
    if err != nil {
        panic(err)
    }

    for _, b := range s.Buckets {
        fmt.Printf("列表: %#v\n", b)

    }

}

列印結果:

列表: cos.Bucket{Name:"*****-1309****", Region:"ap-shanghai", CreationDate:"2022-04-07T03:54:47Z"}

看到輸出結果有:1、儲存桶名 2、騰訊給的一串數字 3、服務地址 4、時間戳

4、上傳物件
package main

import (
    "context"
    "os"
    "strings"
    "net/http"
    "net/url"
    "github.com/tencentyun/cos-go-sdk-v5"
)

func main() {
    //秘鑰,該秘鑰無效,需要更換自己的秘鑰
    secID := "AKIDe8Ldfnjd0LQGrtgDUdfjkcnfdhfidf"
    secKey := "4rdffcKdfndlx3wax4vVoqbdfjihidfnkdff"
    u, err := url.Parse("http://<BucketName-APPID>.cos.accelerate.myqcloud.com")
    if err != nil {
        panic(err)
    }
    b := &cos.BaseURL{BucketURL: u}
    c := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  secID,
            SecretKey: secKey,
        },
    })

    //1.透過字串上傳
    f := strings.NewReader("this is txt of test")

    name := "myCloudtest"
    _, err = c.Object.Put(context.Background(), name, f, nil)
    if err != nil {
        panic((err))
    }

    //2.透過本地檔案上傳物件
    path := "/Users/feng/test/img/10.png"
    name = "myCloudimg"

  _, err = c.Object.PutFromFile(context.Background(), name, path, nil)
  if err != nil {
      panic(err)
  }

    //3. 透過檔案流上傳
    fd, err := os.Open("/Users/feng/test/img/haha.png")
    if err != nil {
        panic(err)
    }
    defer fd.Close()
    name = "myCloudfileIO"

    _, err = c.Object.Put(context.Background(), name, fd, nil)
    if err != nil {
        panic(err)
    }

}
5. 獲取預簽名URL
package main

import (
    "context"
    "fmt"
    "net/http"
    "net/url"
    "time"

    "github.com/tencentyun/cos-go-sdk-v5"
)

func main() {

u, err := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
    if err != nil {
        panic(err)
    }
    //秘鑰
    secID := "AKIDe8Ldfnjd0LQGrtgDUdfjkcnfdhfidf"
    secKey := "4rdffcKdfndlx3wax4vVoqbdfjihidfnkdff"

    b := &cos.BaseURL{BucketURL: u}

    client := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  secID,
            SecretKey: secKey,
        },
    })
    //儲存桶檔名
    name := "cloud.png"
    // 獲取預簽名URL
    presignedURL, err := client.Object.GetPresignedURL(context.Background(),
        http.MethodGet,
        name,
        secID,
        secKey,
        20*time.Second, nil)
    if err != nil {
        panic(err)
    }

    fmt.Println(presignedURL)
}

列印結果:

[*****MacBook-Pro:~/src/coolcar/server] feng% go run cmd/cos/main.go
https://myname-13*****8.cos.ap-shanghai.myqcloud.com/cloud.png?q-sign-algorithm=sha1&q-ak=AKIDe8LIyNWO0LQGrtgDUUEykU8XgY9drpMe&q-sign-time=1649332331%3B1649334651&q-key-time=1649332331%3B1649334651&q-header-list=host&q-url-param-list=&q-signature=e39e153454c6cffaf8750b0b0f8bffb00b590d356
[*****MacBook-Pro:~/src/coolcar/server] feng% 

接著我們訪問該URL:

就可以訪問到我們的騰訊雲端儲存桶的name := "cloud.png"檔案,有效時間只有20秒

6、查詢物件儲存列表
package main

import (
    "context"
    "fmt"
    "net/http"
    "net/url"
    "github.com/tencentyun/cos-go-sdk-v5"
)

func main() {
    secID := "AKIDe8Ldfnjd0LQGrtgDUdfjkcnfdhfidf"
    secKey := "4rdffcKdfndlx3wax4vVoqbdfjihidfnkdff"
    u, err := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
    if err != nil {
        panic(err)
    }
    b := &cos.BaseURL{BucketURL: u}
    c := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  secID,
            SecretKey: secKey,
        },
    })

    opt := &cos.BucketGetOptions{
        Prefix:  "myCloudimg",
        MaxKeys: 3,
    }
    v, _, err := c.Bucket.Get(context.Background(), opt)
    if err != nil {
        panic(err)
    }

    for _, c := range v.Contents {
        fmt.Printf("%s, %d\n", c.Key, c.Size)
    }

}
7. 下載物件
package main

import (
    "context"
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "github.com/tencentyun/cos-go-sdk-v5"
)

func main() {
    secID := "AKIDe8Ldfnjd0LQGrtgDUdfjkcnfdhfidf"
    secKey := "4rdffcKdfndlx3wax4vVoqbdfjihidfnkdff"
    u, err := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
    if err != nil {
        panic(err)
    }
    b := &cos.BaseURL{BucketURL: u}

    c := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  secID,
            SecretKey: secKey,
        },
    })


    name := "myCloudimg"
    localpath := "/Users/feng/Desktop/fromCloudimg.png"

  //1.透過響應體獲取物件
    resp, err := c.Object.Get(context.Background(), name, nil)
    if err != nil {
        panic(err)
    }
    bs, _ := ioutil.ReadAll(resp.Body)
    resp.Body.Close()
    fmt.Printf("%s\n", string(bs))

    //2.獲取物件到本地檔案
    _, err = c.Object.GetToFile(context.Background(), name, localpath, nil)
    if err != nil {
        panic(err)
    }
8. 刪除物件
package main

import (
    "context"
    "net/http"
    "net/url"

    "github.com/tencentyun/cos-go-sdk-v5"
)

func main() {
    secID := "AKIDe8Ldfnjd0LQGrtgDUdfjkcnfdhfidf"
    secKey := "4rdffcKdfndlx3wax4vVoqbdfjihidfnkdff"
    u, err := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
    if err != nil {
        panic(err)
    }
    b := &cos.BaseURL{BucketURL: u}
    c := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            SecretID:  secID,
            SecretKey: secKey,
        },
    })

    name := "myCloudfileIO" //刪除指定物件
    _, err = c.Object.Delete(context.Background(), name, nil)
    if err != nil {
        panic(err)
    }

}
本作品採用《CC 協議》,轉載必須註明作者和本文連結