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
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))
|
|
}
|
|
|