2025-03-05 19:59:28 +05:00

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
}