You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

193 lines
5.6 KiB

package cos_test
import (
"context"
lgcos "yunyan/sys/tencentyun/cos"
"fmt"
"io"
"log"
"net/http"
"net/url"
"strings"
"testing"
"time"
"github.com/tencentyun/cos-go-sdk-v5"
sts "github.com/tencentyun/qcloud-cos-sts-sdk/go"
)
func Test_Sys(t *testing.T) {
if err := lgcos.OnInit(nil,
lgcos.SetSecretID("AKID9F8qNiqlTzIMFwQ9rQxNcgYCdsukNmzA"),
lgcos.SetSecretKey("OYVGo8HEzWpvpfHgtfHfqpcDbnlY7Tdc"),
lgcos.SetAppId("1253517901"),
lgcos.SetRegion("ap-guangzhou"),
lgcos.SetBucketName("deepsound-1253517901"),
lgcos.SetBucketURL("https://deepsound-1253517901.cos.ap-guangzhou.myqcloud.com"),
lgcos.SetDomainName("app.deepsoud.com"),
); err != nil {
return
} else {
// var file *os.File
// defer file.Close()
// if file, err = os.Open("./DeapSound_0619.apk"); err != nil {
// fmt.Println("打开文件失败!", err)
// return
// }
results := lgcos.GetFileUrl("app/DeapSound_0619.apk")
fmt.Printf("results:%s", results)
}
}
func Test_Sys_Sts(t *testing.T) {
if err := lgcos.OnInit(nil,
lgcos.SetSecretID("AKID9F8qNiqlTzIMFwQ9rQxNcgYCdsukNmzA"),
lgcos.SetSecretKey("OYVGo8HEzWpvpfHgtfHfqpcDbnlY7Tdc"),
lgcos.SetAppId("1253517901"),
lgcos.SetRegion("ap-guangzhou"),
lgcos.SetBucketName("deepsound-1253517901"),
lgcos.SetBucketURL("https://deepsound-1253517901.cos.ap-guangzhou.myqcloud.com"),
); err != nil {
return
} else {
results, err := lgcos.Sts()
// fmt.Printf("TmpSecretId:%s TmpSecretKey:%s SessionToken:%s err:%v", results.Credentials.TmpSecretID, results.Credentials.TmpSecretKey, results.Credentials.SessionToken, err)
// 你的 COS 存储桶信息
bucketURL := "https://deepsound-1253517901.cos.ap-guangzhou.myqcloud.com"
// 通过 STS 获取的临时凭证
tmpSecretID := results.Credentials.TmpSecretID
tmpSecretKey := results.Credentials.TmpSecretKey
sessionToken := results.Credentials.SessionToken
// 初始化 COS 客户端
u, _ := url.Parse(bucketURL)
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: tmpSecretID,
SecretKey: tmpSecretKey,
SessionToken: sessionToken, // 关键部分,必须加上 SessionToken
},
})
// objectKey := "test.txt"
// content := "Hello, COS with STS!"
// _, err = client.Object.Put(context.Background(), objectKey,
// strings.NewReader(content), nil)
// if err != nil {
// log.Fatalf("上传对象失败: %v", err)
// }
// fmt.Printf("成功上传对象: %s\n", objectKey)
// 测试下载对象
// resp, err := client.Object.Get(context.Background(), objectKey, nil)
// if err != nil {
// log.Fatalf("下载对象失败: %v", err)
// }
// defer resp.Body.Close()
// body, err := io.ReadAll(resp.Body)
// if err != nil {
// log.Fatalf("读取对象内容失败: %v", err)
// }
// fmt.Printf("下载对象内容: %s\n", string(body))
// 示例:列出存储桶中的对象
result, _, err := client.Bucket.Get(context.Background(), nil)
if err != nil {
fmt.Println("请求失败:", err)
return
}
for _, v := range result.Contents {
fmt.Println("文件名:", v.Key)
}
}
}
func Test_Sys_Sts1(t *testing.T) {
// 替换为您的永久密钥
secretID := "AKID9F8qNiqlTzIMFwQ9rQxNcgYCdsukNmzA"
secretKey := "OYVGo8HEzWpvpfHgtfHfqpcDbnlY7Tdc"
// 配置存储桶信息
appID := "1253517901"
bucket := "deepsound-1253517901"
region := "ap-guangzhou"
bucketURL := fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucket, region)
// 创建 STS 客户端
client := sts.NewClient(secretID, secretKey, nil)
// 配置策略
policy := &sts.CredentialPolicy{
Version: "2.0",
Statement: []sts.CredentialPolicyStatement{
{
Effect: "allow",
Action: []string{
"name/cos:GetObject",
"name/cos:PutObject",
"name/cos:ListBucket",
},
Resource: []string{
fmt.Sprintf("qcs::cos:%s:uid/%s:%s", region, appID, bucket),
fmt.Sprintf("qcs::cos:%s:uid/%s:%s/*", region, appID, bucket),
},
},
},
}
// 配置临时密钥参数
opt := &sts.CredentialOptions{
DurationSeconds: int64(time.Hour.Seconds()), // 有效期:1小时
Region: region,
Policy: policy,
}
// 获取临时密钥
result, err := client.GetCredential(opt)
if err != nil {
log.Fatalf("获取临时密钥失败: %v", err)
}
fmt.Printf("临时密钥信息:\n")
fmt.Printf("TmpSecretId: %s\n", result.Credentials.TmpSecretID)
fmt.Printf("TmpSecretKey: %s\n", result.Credentials.TmpSecretKey)
fmt.Printf("SessionToken: %s\n", result.Credentials.SessionToken)
fmt.Printf("开始时间: %d\n", result.StartTime)
fmt.Printf("过期时间: %d\n", result.ExpiredTime)
// 使用临时密钥配置 COS 客户端
u, _ := url.Parse(bucketURL)
b := &cos.BaseURL{BucketURL: u}
cosClient := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: result.Credentials.TmpSecretID,
SecretKey: result.Credentials.TmpSecretKey,
SessionToken: result.Credentials.SessionToken,
},
})
// 测试上传对象
objectKey := "test.txt"
content := "Hello, COS with STS!"
_, err = cosClient.Object.Put(context.Background(), objectKey,
strings.NewReader(content), nil)
if err != nil {
log.Fatalf("上传对象失败: %v", err)
}
fmt.Printf("成功上传对象: %s\n", objectKey)
// 测试下载对象
resp, err := cosClient.Object.Get(context.Background(), objectKey, nil)
if err != nil {
log.Fatalf("下载对象失败: %v", err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatalf("读取对象内容失败: %v", err)
}
fmt.Printf("下载对象内容: %s\n", string(body))
}