octopus/pkg/storage/storage.go

45 lines
1.2 KiB
Go
Raw Normal View History

2023-03-23 13:52:44 +08:00
package storage
import (
"context"
"errors"
"net/url"
"time"
"github.com/spf13/cast"
)
type ObjectStorage interface {
// 获取上传对象预签名URL
PresignedPutObject(ctx context.Context, objectName string, expires time.Duration) (u *url.URL, err error)
// 获取访问对象预签名URL
PresignedGetObject(ctx context.Context, objectName string, expires time.Duration) (u *url.URL, err error)
// 移动对象
MoveObject(ctx context.Context, src, dst string) error
// 检查文件是否存在
ObjectExists(ctx context.Context, objectName string) (bool, error)
}
func NewObjectStorage(dsn string) (ObjectStorage, error) {
u, err := url.Parse(dsn)
if err != nil {
return nil, err
}
user := u.User.Username()
pass, _ := u.User.Password()
switch u.Scheme {
case "cos":
// ex: cos://examplebucket-1250000000.cos.COS_REGION.myqcloud.com
return newCosStorage(u.Host, user, pass)
case "minio":
// ex: minio://minio-api:9001?secure=false&bucket=images
secure := cast.ToBool(u.Query().Get("secure"))
bucket := u.Query().Get("bucket")
return newMinioStorage(u.Host, user, pass, secure, bucket)
default:
return nil, errors.New("the storage type not support yet")
}
}