mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 04:17:23 +00:00
49 lines
1.1 KiB
Go
49 lines
1.1 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) (string, error)
|
|
// Download return the download url of the file with the given storage key.
|
|
Download(storageKey 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
|
|
}
|