fix filenames

This commit is contained in:
2026-07-24 18:24:49 +07:00
parent c6a561f570
commit 1bab74d8ca
3 changed files with 68 additions and 0 deletions
Binary file not shown.
@@ -0,0 +1,66 @@
package string_tools
import (
"regexp"
"strings"
)
var (
replacer = strings.NewReplacer(
"а", "a",
"б", "b",
"в", "v",
"г", "g",
"д", "d",
"е", "e",
"ё", "yo",
"ж", "zh",
"з", "z",
"и", "i",
"й", "y",
"к", "k",
"л", "l",
"м", "m",
"н", "n",
"о", "o",
"п", "p",
"р", "r",
"с", "s",
"т", "t",
"у", "u",
"ф", "f",
"х", "h",
"ц", "ts",
"ч", "ch",
"ш", "sh",
"щ", "sch",
"ъ", "",
"ы", "y",
"ь", "",
"э", "e",
"ю", "yu",
"я", "ya",
" ", "_",
)
)
// Transliterate выполняет транслитерацию русского текста в латиницу,
// заменяет пробелы на _, удаляет все остальные символы, кроме цифр (знаки препинания и т.д.)
func Transliterate(text string) string {
// Приводим к нижнему регистру и транслитерируем
result := replacer.Replace(strings.ToLower(text))
// Удаляем все символы, кроме букв латиницы, подчеркивания и цифр
reg := regexp.MustCompile(`[^a-z0-9_]`)
result = reg.ReplaceAllString(result, "")
// Удаляем множественные подчеркивания (опционально)
regMulti := regexp.MustCompile(`_+`)
result = regMulti.ReplaceAllString(result, "_")
// Удаляем подчеркивания в начале и конце строки (опционально)
result = strings.Trim(result, "_")
return result
}
@@ -3,6 +3,7 @@ package file_service
import ( import (
"context" "context"
"evening_detective_server/internal/modules/file_storage" "evening_detective_server/internal/modules/file_storage"
"evening_detective_server/internal/modules/string_tools"
) )
type FileService struct { type FileService struct {
@@ -21,6 +22,7 @@ func (s *FileService) UploadFile(
ctx context.Context, ctx context.Context,
file *file_storage.File, file *file_storage.File,
) (string, error) { ) (string, error) {
file.Name = string_tools.Transliterate(file.Name)
if err := s.fileStorage.Put(ctx, file); err != nil { if err := s.fileStorage.Put(ctx, file); err != nil {
return "", err return "", err
} }