一、下載與安裝
環境依賴
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
}
下面是請求例項這是直接去騰訊官網找到的:
使用永久秘鑰
// 將 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 }, })
使用臨時秘鑰
// 將 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 請求 }
設定域名
透過修改 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 協議》,轉載必須註明作者和本文連結