package storagehandlers import ( "errors" "mime/multipart" ) var ( Storagepath string ) type StorageHandler interface { Init() error Add(file *multipart.FileHeader, fileId string) error Delete(filename string) error Get(filename string) (string, error) List() ([]string, error) } type StorageStrategy string const ( FS StorageStrategy = "fs" S3 StorageStrategy = "s3" ) func NewStorageHandler(strategy StorageStrategy) (StorageHandler, error) { if Storagepath == "" { return nil, errors.New("storage path not set") } switch strategy { case FS: h := NewFsHandler() err := h.Init() if err != nil { return nil, err } return h, nil case S3: h, err := NewS3Handler() if err != nil { return nil, err } err = h.Init() if err != nil { return nil, err } return h, nil default: return nil, errors.New("invalid storage strategy") } }