uniugm/admin/lib/dfs/dfs_cos.go

58 lines
1.7 KiB
Go
Raw Normal View History

2025-07-07 17:07:58 +08:00
package dfs
import (
"bytes"
"context"
"fmt"
"github.com/tencentyun/cos-go-sdk-v5"
"io"
"net/http"
"net/url"
"time"
)
type cosClient struct {
client *cos.Client
}
func newCos(secretId, secretKey, bucket string, region string) IDfs {
c := new(cosClient)
//u, _ := url.Parse(fmt.Sprintf("https://ttsj-1359624709.cos.ap-chengdu.myqcloud.com", bucket, region))
u, _ := url.Parse(fmt.Sprintf("https://%v.cos.%v.myqcloud.com", bucket, region))
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: secretId, // 用户的 SecretId建议使用子账号密钥授权遵循最小权限指引降低使用风险。子账号密钥获取可参考 https://cloud.tencent.com/document/product/598/37140
SecretKey: secretKey, // 用户的 SecretKey建议使用子账号密钥授权遵循最小权限指引降低使用风险。子账号密钥获取可参考 https://cloud.tencent.com/document/product/598/37140
},
})
c.client = client
return c
}
func (c *cosClient) GetObj(path string) ([]byte, error) {
ctx, cf := context.WithTimeout(context.Background(), time.Second*10)
defer cf()
rsp, err := c.client.Object.Get(ctx, path, nil)
if err != nil {
return nil, fmt.Errorf("get cos object %v error:%v", path, err)
}
rspBin, err := io.ReadAll(rsp.Body)
if err != nil {
return nil, fmt.Errorf("read response obj %v error:%v", path, err)
}
return rspBin, nil
}
func (c *cosClient) PutObj(path string, content []byte) error {
ctx, cf := context.WithTimeout(context.Background(), time.Second*10)
defer cf()
buffer := bytes.NewBuffer(content)
_, err := c.client.Object.Put(ctx, path, buffer, nil)
return err
}
func (c *cosClient) Close() {
}