Files
nysoure/server/storage/storage.go
nyne 04d679f3f4 Implement s3 storage.
Use uuid as file id.
2025-05-13 11:57:14 +08:00

49 lines
1.2 KiB
Go

package storage
import (
"errors"
"nysoure/server/model"
)
var (
// ErrFileUnavailable is returned when the file is unavailable.
// When this error is returned, it is required to delete the file info from the database.
ErrFileUnavailable = errors.New("file unavailable")
)
type IStorage interface {
// Upload uploads a file to the storage and returns the storage key.
Upload(filePath string, fileName string) (string, error)
// Download return the download url of the file with the given storage key.
Download(storageKey string, fileName string) (string, error)
// Delete deletes the file with the given storage key.
Delete(storageKey string) error
// ToString returns the storage configuration as a string.
ToString() string
// FromString initializes the storage configuration from a string.
FromString(config string) error
// Type returns the type of the storage.
Type() string
}
func NewStorage(s model.Storage) IStorage {
switch s.Type {
case "s3":
r := S3Storage{}
err := r.FromString(s.Config)
if err != nil {
return nil
}
return &r
case "local":
r := LocalStorage{}
err := r.FromString(s.Config)
if err != nil {
return nil
}
return &r
}
return nil
}