first to commit project
This commit is contained in:
101
example/sts/sts.go
Normal file
101
example/sts/sts.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/QcloudApi/qcloud_sign_golang"
|
||||
"github.com/tencentyun/cos-go-sdk-v5"
|
||||
"github.com/tencentyun/cos-go-sdk-v5/debug"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Use Qcloud api github.com/QcloudApi/qcloud_sign_golang
|
||||
// doc https://cloud.tencent.com/document/product/436/14048
|
||||
type Credent struct {
|
||||
SessionToken string `json:"sessionToken"`
|
||||
TmpSecretID string `json:"tmpSecretId"`
|
||||
TmpSecretKey string `json:"tmpSecretKey"`
|
||||
}
|
||||
|
||||
// Data data in sts response body
|
||||
type Data struct {
|
||||
Credentials Credent `json:"credentials"`
|
||||
}
|
||||
|
||||
// Response sts response body
|
||||
// In qcloud_sign_golang this response only return ak, sk and token
|
||||
type Response struct {
|
||||
Dat Data `json:"data"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 替换实际的 SecretId 和 SecretKey
|
||||
secretID := "ak"
|
||||
secretKey := "sk"
|
||||
|
||||
// 配置
|
||||
config := map[string]interface{}{"secretId": secretID, "secretKey": secretKey, "debug": false}
|
||||
|
||||
// 请求参数
|
||||
params := map[string]interface{}{"Region": "gz", "Action": "GetFederationToken", "name": "alantong", "policy": "{\"statement\": [{\"action\": [\"name/cos:GetObject\",\"name/cos:PutObject\"],\"effect\": \"allow\",\"resource\":[\"qcs::cos:ap-guangzhou:uid/1253960454:prefix//1253960454/alangz/*\"]}],\"version\": \"2.0\"}"}
|
||||
|
||||
// 发送请求
|
||||
retData, err := QcloudApi.SendRequest("sts", params, config)
|
||||
if err != nil {
|
||||
fmt.Print("Error.", err)
|
||||
return
|
||||
}
|
||||
r := &Response{}
|
||||
err = json.Unmarshal([]byte(retData), r)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
//获取临时ak、sk、token
|
||||
tAk := r.Dat.Credentials.TmpSecretID
|
||||
tSk := r.Dat.Credentials.TmpSecretKey
|
||||
token := r.Dat.Credentials.SessionToken
|
||||
|
||||
u, _ := url.Parse("https://alangz-1253960454.cos.ap-guangzhou.myqcloud.com")
|
||||
b := &cos.BaseURL{BucketURL: u}
|
||||
c := cos.NewClient(b, &http.Client{
|
||||
Transport: &cos.AuthorizationTransport{
|
||||
SecretID: tAk,
|
||||
SecretKey: tSk,
|
||||
SessionToken: token,
|
||||
Transport: &debug.DebugRequestTransport{
|
||||
RequestHeader: true,
|
||||
RequestBody: true,
|
||||
ResponseHeader: true,
|
||||
ResponseBody: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
name := "test/objectPut.go"
|
||||
f := strings.NewReader("test")
|
||||
|
||||
_, err = c.Object.Put(context.Background(), name, f, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
name = "test/put_option.go"
|
||||
f = strings.NewReader("test xxx")
|
||||
opt := &cos.ObjectPutOptions{
|
||||
ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{
|
||||
ContentType: "text/html",
|
||||
},
|
||||
ACLHeaderOptions: &cos.ACLHeaderOptions{
|
||||
//XCosACL: "public-read",
|
||||
XCosACL: "private",
|
||||
},
|
||||
}
|
||||
_, err = c.Object.Put(context.Background(), name, f, opt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user