package utils import ( "io" "mime/multipart" "os" "path/filepath" "strings" ) func GetFileExtension(filename string) string { splitted := strings.Split(filename, ".") return splitted[len(splitted)-1] } func GetImageMimeType(ext string) string { switch ext { case "jpg", "jpeg": return "image/jpeg" case "png": return "image/png" case "svg": return "image/svg+xml" case "ico": return "image/x-icon" default: return "" } } func CopyDirectory(srcDir, destDir string) error { files, err := os.ReadDir(srcDir) if err != nil { return err } for _, file := range files { srcFilePath := filepath.Join(srcDir, file.Name()) destFilePath := filepath.Join(destDir, file.Name()) err := CopyFile(srcFilePath, destFilePath) if err != nil { return err } } return nil } func CopyFile(srcFilePath, destFilePath string) error { srcFile, err := os.Open(srcFilePath) if err != nil { return err } defer srcFile.Close() err = os.MkdirAll(filepath.Dir(destFilePath), os.ModePerm) if err != nil { return err } destFile, err := os.Create(destFilePath) if err != nil { return err } defer destFile.Close() _, err = io.Copy(destFile, srcFile) if err != nil { return err } return nil } func SaveFile(file *multipart.FileHeader, dst string) error { src, err := file.Open() if err != nil { return err } defer src.Close() if err = os.MkdirAll(filepath.Dir(dst), 0o750); err != nil { return err } out, err := os.Create(dst) if err != nil { return err } defer out.Close() _, err = io.Copy(out, src) return err }