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 }