51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package storage
|
|
|
|
import (
|
|
"cs-agent/internal/pkg/config"
|
|
"cs-agent/internal/pkg/enums"
|
|
"cs-agent/internal/pkg/errorsx"
|
|
"io"
|
|
)
|
|
|
|
var providers = make(map[enums.AssetProvider]FileStorageProvider)
|
|
|
|
type FileStorageProvider interface {
|
|
ProviderType() enums.AssetProvider
|
|
Upload(reader io.Reader, key string, info UploadInfo) (*StoredFile, error)
|
|
GetURL(key string) string
|
|
GetSignedURL(key string) string
|
|
Delete(key string) error
|
|
Read(key string) (io.ReadCloser, error)
|
|
}
|
|
|
|
func GetDefault() (FileStorageProvider, error) {
|
|
return NewProvider(config.Current().Storage.Default)
|
|
}
|
|
|
|
func GetProvider(providerType enums.AssetProvider) (FileStorageProvider, error) {
|
|
if provider, exists := providers[providerType]; exists {
|
|
return provider, nil
|
|
}
|
|
provider, err := NewProvider(providerType)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
providers[providerType] = provider
|
|
|
|
return provider, nil
|
|
}
|
|
|
|
func NewProvider(provider enums.AssetProvider) (FileStorageProvider, error) {
|
|
cfg := config.Current().Storage
|
|
|
|
switch provider {
|
|
case "", enums.AssetProviderLocal:
|
|
return NewLocalStorage(cfg.Local), nil
|
|
case enums.AssetProviderOSS:
|
|
return NewOSSStorage(cfg.OSS), nil
|
|
default:
|
|
return nil, errorsx.InvalidParam("不支持的文件存储类型")
|
|
}
|
|
}
|