octopus/pkg/storage/storage.go

46 lines
1.3 KiB
Go
Raw Normal View History

2023-03-23 13:52:44 +08:00
package storage
import (
"errors"
"net/url"
2023-03-23 22:32:19 +08:00
"strings"
2023-03-23 13:52:44 +08:00
"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)
// // 获取对象创建时间
// GetObjectCreatedTime(ctx context.Context, objectName string) (time.Time, error)
// }
2023-03-23 13:52:44 +08:00
2023-03-23 22:32:19 +08:00
func NewObjectStorage(dsn string) (*Storage, error) {
2023-03-23 13:52:44 +08:00
u, err := url.Parse(dsn)
if err != nil {
return nil, err
}
user := u.User.Username()
pass, _ := u.User.Password()
switch u.Scheme {
2023-03-23 22:32:19 +08:00
case "cos":
bucket := strings.Split(u.Host, "-")[0]
return newStorage(u.Host, user, pass, true, bucket)
2023-03-23 13:52:44 +08:00
case "minio":
// ex: minio://minio-api:9001?secure=false&bucket=images
secure := cast.ToBool(u.Query().Get("secure"))
bucket := u.Query().Get("bucket")
2023-03-23 22:32:19 +08:00
return newStorage(u.Host, user, pass, secure, bucket)
2023-03-23 13:52:44 +08:00
default:
return nil, errors.New("the storage type not support yet")
}
}