|
|
package storage
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
"github.com/tencentyun/cos-go-sdk-v5"
|
|
|
"net/http"
|
|
|
"net/url"
|
|
|
"uploader/config"
|
|
|
)
|
|
|
|
|
|
type CosStorage struct {
|
|
|
Config *config.Cos
|
|
|
}
|
|
|
|
|
|
func NewCosStorage(config *config.Cos) *CosStorage {
|
|
|
return &CosStorage{Config: config}
|
|
|
}
|
|
|
|
|
|
func (s *CosStorage) getClient() (*cos.Client, error) {
|
|
|
u, _ := url.Parse(s.Config.BucketURL)
|
|
|
b := &cos.BaseURL{BucketURL: u}
|
|
|
client := cos.NewClient(b, &http.Client{
|
|
|
Transport: &cos.AuthorizationTransport{
|
|
|
// 通过环境变量获取密钥
|
|
|
// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
|
|
|
SecretID: s.Config.SecretID, // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
|
|
|
// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
|
|
|
SecretKey: s.Config.SecretKey, // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
|
|
|
},
|
|
|
})
|
|
|
return client, nil
|
|
|
}
|
|
|
|
|
|
func (s *CosStorage) Upload(filePath, destPath string) (string, error) {
|
|
|
client, err := s.getClient()
|
|
|
if err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
|
|
|
_, _, err = client.Object.Upload(
|
|
|
context.Background(), destPath, filePath, &cos.MultiUploadOptions{ThreadPoolSize: 5, PartSize: 30},
|
|
|
)
|
|
|
if err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
|
|
|
return s.Config.Domain + "/" + destPath, err
|
|
|
}
|
|
|
|
|
|
func (s *CosStorage) Delete(objectName string) error {
|
|
|
client, err := s.getClient()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
_, err = client.Object.Delete(context.Background(), objectName)
|
|
|
return err
|
|
|
}
|