You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

31 lines
818 B

package storage
import (
"context"
"fmt"
"io"
"github.com/youruser/base/internal/config"
)
// Storage defines the interface for file storage backends.
type Storage interface {
Upload(ctx context.Context, key string, reader io.Reader, size int64, contentType string) error
Delete(ctx context.Context, key string) error
GetURL(ctx context.Context, key string) (string, error)
Exists(ctx context.Context, key string) (bool, error)
}
// NewStorage creates the appropriate storage backend from config.
func NewStorage(cfg config.StorageConfig) (Storage, error) {
switch cfg.Type {
case "local":
return NewLocalStorage(cfg.Local)
case "oss":
return NewOSSStorage(cfg.OSS)
case "minio":
return NewMinIOStorage(cfg.MinIO)
default:
return nil, fmt.Errorf("unsupported storage type: %s", cfg.Type)
}
}