telco_server/tools/ali/oss.go

88 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package aliyun
import (
"errors"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
stsToken "github.com/aliyun/aliyun-sts-go-sdk/sts"
"github.com/go-admin-team/go-admin-core/logger"
"golang.org/x/net/context"
"os"
"time"
)
const (
AliyunAccessKeyID = "LTAI5t9sZ7ZhEirYKETbEhbJ"
AliyunAccessKeySecret = "mtDxepQAAhzQ7g2aQsB5Hq2339ryAI"
AliyunRoleArn = "acs:ram::1069419146450879:role/aliyunoss"
AliyunOssBucketName = "yy-telecom"
AliyunOssUrl = "https://yy-telecom.oss-cn-shenzhen.aliyuncs.com/"
AliyunOssRegion = "cn-shenzhen"
ExpiredTime = 3600
)
type UploadInfo struct {
AccessKeyId string `json:"access_key_id"`
AccessKeySecret string `json:"access_key_secret"`
Expiration int64 `json:"expiration"`
SecurityToken string `json:"security_token"`
BucketName string `json:"bucket_name"`
}
// init函数用于初始化命令行参数
func init() {
os.Setenv("OSS_ACCESS_KEY_ID", AliyunAccessKeyID)
os.Setenv("OSS_ACCESS_KEY_SECRET", AliyunAccessKeySecret)
}
// GenStsToken uid用来区分sts授予了哪个用户可以传将用户uid转为string传入
// 传入的字符串长度必须大于1
// stsToken的默认有效时间为一小时
func GenStsToken(uid string) (*UploadInfo, error) {
stsClient := stsToken.NewClient(AliyunAccessKeyID, AliyunAccessKeySecret, AliyunRoleArn, uid)
resp, err := stsClient.AssumeRole(ExpiredTime)
if err != nil {
return nil, err
}
logger.Error("err:%v", err)
logger.Info("AssumeRole:resp:%v", resp)
uploadInfo := &UploadInfo{
AccessKeyId: resp.Credentials.AccessKeyId,
AccessKeySecret: resp.Credentials.AccessKeySecret,
Expiration: resp.Credentials.Expiration.Unix(),
SecurityToken: resp.Credentials.SecurityToken,
BucketName: AliyunOssBucketName,
}
return uploadInfo, nil
}
// GeneratePresignedURL 生成 OSS 对象的预签名 URL
func GeneratePresignedURL(objectName string) (string, error) {
if objectName == "" {
return "", errors.New("invalid parameters: object are required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(AliyunOssRegion)
// 创建 OSS 客户端
client := oss.NewClient(cfg)
// 生成 GetObject 的预签名 URL
result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
Bucket: oss.Ptr(AliyunOssBucketName),
Key: oss.Ptr(objectName),
},
oss.PresignExpires(5*time.Minute),
)
if err != nil {
return "", err
}
return result.URL, nil
}