98 lines
1.7 KiB
Go
98 lines
1.7 KiB
Go
package sysStorage
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"mime/multipart"
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
type LocalStorage struct {
|
|
basePath string
|
|
}
|
|
|
|
func NewLocalStorage(basePath string) *LocalStorage {
|
|
if basePath == "" {
|
|
var err error
|
|
basePath, err = os.Getwd()
|
|
if err != nil {
|
|
panic("Failed to get current directory: " + err.Error())
|
|
}
|
|
}
|
|
|
|
if err := os.MkdirAll(basePath, os.ModePerm); err != nil {
|
|
panic("Failed to create storage directory: " + err.Error())
|
|
}
|
|
return &LocalStorage{basePath: basePath}
|
|
}
|
|
|
|
func (ls *LocalStorage) Upload(
|
|
file *multipart.FileHeader,
|
|
streamerID int,
|
|
) error {
|
|
dirPath := ls.basePath + "/" + strconv.Itoa(streamerID)
|
|
|
|
if _, err := os.Stat(dirPath); os.IsNotExist(err) {
|
|
if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
f, err := os.Create(dirPath + "/" + file.Filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
// Открываем загруженный файл
|
|
srcFile, err := file.Open()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer srcFile.Close()
|
|
|
|
// Копируем содержимое в новый файл
|
|
_, err = io.Copy(f, srcFile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (ls *LocalStorage) Download(
|
|
filename string,
|
|
extension string,
|
|
filePath string,
|
|
) ([]byte, error) {
|
|
f, err := os.Open(filePath + "/" + filename + "." + extension)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
var fileBuffer bytes.Buffer
|
|
_, err = io.Copy(&fileBuffer, f)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return fileBuffer.Bytes(), nil
|
|
}
|
|
|
|
func (ls *LocalStorage) Delete(
|
|
filename string,
|
|
extension string,
|
|
filePath string,
|
|
) error {
|
|
fileFullPath := filePath + "/" + filename + "." + extension
|
|
|
|
err := os.Remove(fileFullPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|