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.
36 lines
950 B
36 lines
950 B
package storage
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/spf13/afero"
|
|
)
|
|
|
|
type IStorageProvider interface {
|
|
storeRaw(bucketName string, objectName string, data []byte) string
|
|
storeExisting(bucketName string, objectName string, existingFilePath string) string
|
|
}
|
|
|
|
type FileSystemStorageProvider struct {
|
|
fileSystem afero.Fs
|
|
basePath string
|
|
}
|
|
|
|
func (sp FileSystemStorageProvider) storeRaw(bucketName string, objectName string, data []byte) string {
|
|
directoryPath := filepath.Join(sp.basePath, bucketName)
|
|
|
|
sp.fileSystem.MkdirAll(directoryPath, os.ModePerm)
|
|
|
|
filePath := filepath.Join(directoryPath, objectName)
|
|
|
|
afero.WriteFile(sp.fileSystem, filePath, data, os.ModePerm)
|
|
|
|
return filePath
|
|
}
|
|
|
|
func (sp FileSystemStorageProvider) storeExisting(bucketName string, objectName string, existingFilePath string) string {
|
|
bytesRead, _ := afero.ReadFile(sp.fileSystem, existingFilePath)
|
|
|
|
return sp.storeRaw(bucketName, objectName, bytesRead)
|
|
}
|