1Panel/backend/utils/cloud_storage/client/oss.go

125 lines
2.6 KiB
Go

package client
import (
"github.com/1Panel-dev/1Panel/constant"
osssdk "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
type ossClient struct {
Vars map[string]interface{}
client osssdk.Client
}
func NewOssClient(vars map[string]interface{}) (*ossClient, error) {
var endpoint string
var accessKey string
var secretKey string
if _, ok := vars["endpoint"]; ok {
endpoint = vars["endpoint"].(string)
} else {
return nil, constant.ErrInvalidParams
}
if _, ok := vars["accessKey"]; ok {
accessKey = vars["accessKey"].(string)
} else {
return nil, constant.ErrInvalidParams
}
if _, ok := vars["secretKey"]; ok {
secretKey = vars["secretKey"].(string)
} else {
return nil, constant.ErrInvalidParams
}
client, err := osssdk.New(endpoint, accessKey, secretKey)
if err != nil {
return nil, err
}
return &ossClient{
Vars: vars,
client: *client,
}, nil
}
func (oss ossClient) ListBuckets() ([]interface{}, error) {
response, err := oss.client.ListBuckets()
if err != nil {
return nil, err
}
var result []interface{}
for _, bucket := range response.Buckets {
result = append(result, bucket.Name)
}
return result, err
}
func (oss ossClient) Exist(path string) (bool, error) {
bucket, err := oss.GetBucket()
if err != nil {
return false, err
}
return bucket.IsObjectExist(path)
}
func (oss ossClient) Delete(path string) (bool, error) {
bucket, err := oss.GetBucket()
if err != nil {
return false, err
}
err = bucket.DeleteObject(path)
if err != nil {
return false, err
}
return true, nil
}
func (oss ossClient) Upload(src, target string) (bool, error) {
bucket, err := oss.GetBucket()
if err != nil {
return false, err
}
err = bucket.PutObjectFromFile(target, src)
if err != nil {
return false, err
}
return true, nil
}
func (oss ossClient) Download(src, target string) (bool, error) {
bucket, err := oss.GetBucket()
if err != nil {
return false, err
}
err = bucket.GetObjectToFile(src, target)
if err != nil {
return false, err
}
return true, nil
}
func (oss *ossClient) GetBucket() (*osssdk.Bucket, error) {
if _, ok := oss.Vars["bucket"]; ok {
bucket, err := oss.client.Bucket(oss.Vars["bucket"].(string))
if err != nil {
return nil, err
}
return bucket, nil
} else {
return nil, constant.ErrInvalidParams
}
}
func (oss *ossClient) ListObjects(prefix string) ([]interface{}, error) {
bucket, err := oss.GetBucket()
if err != nil {
return nil, constant.ErrInvalidParams
}
lor, err := bucket.ListObjects(osssdk.Prefix(prefix))
if err != nil {
return nil, err
}
var result []interface{}
for _, obj := range lor.Objects {
result = append(result, obj.Key)
}
return result, nil
}