переосмысление

This commit is contained in:
S.Solodyagin
2025-10-30 10:55:36 +03:00
parent dfac158af5
commit 5676ad927d
+21 -14
View File
@@ -41,12 +41,13 @@ func WithPermissions(perm os.FileMode) LocalStorageOption {
// FileInfo описывает информацию о сохраненном файле. // FileInfo описывает информацию о сохраненном файле.
type FileInfo struct { type FileInfo struct {
Location string `json:"location"` Location string // @deprecated
Name string `json:"name"` Path string
Mimetype string `json:"mimetype"` Name string
Size int64 `json:"size"` Mimetype string
CRC32 uint32 `json:"crc32"` Size int64
MD5 string `json:"md5"` CRC32 uint32
MD5 string
} }
// NewLocalStorage открывает и возвращает хранилище файлов. // NewLocalStorage открывает и возвращает хранилище файлов.
@@ -102,7 +103,8 @@ func (s *LocalStorage) Create(r io.Reader) (*FileInfo, error) {
sumMD5 := hashMD5.Sum(nil) sumMD5 := hashMD5.Sum(nil)
name := base32.StdEncoding.EncodeToString(append(hashCRC32.Sum(nil), sumMD5...)) name := base32.StdEncoding.EncodeToString(append(hashCRC32.Sum(nil), sumMD5...))
fi := &FileInfo{ fi := &FileInfo{
Location: s.GetFullName(name), Location: s.GetPath(name),
Path: s.GetPath(name),
Name: name, Name: name,
Mimetype: mimetype, Mimetype: mimetype,
Size: size, Size: size,
@@ -120,18 +122,18 @@ func (s *LocalStorage) Create(r io.Reader) (*FileInfo, error) {
// Если файл уже существует, то просто обновляем его время создания // Если файл уже существует, то просто обновляем его время создания
now := time.Now() now := time.Now()
if err := os.Chtimes(fi.Location, now, now); err == nil { if err := os.Chtimes(fi.Path, now, now); err == nil {
return fi, nil // Возвращаем информацию о файле, временный файл будет автоматически удален return fi, nil // Возвращаем информацию о файле, временный файл будет автоматически удален
} }
// Если такого файла нет, то создаем для него каталог // Если такого файла нет, то создаем для него каталог
if err := os.MkdirAll(filepath.Dir(fi.Location), s.perm); err != nil { if err := os.MkdirAll(filepath.Dir(fi.Path), s.perm); err != nil {
err.(*os.PathError).Path = fi.Name err.(*os.PathError).Path = fi.Name
return nil, err return nil, err
} }
// Перемещаем временный файл в этот каталог // Перемещаем временный файл в этот каталог
if err := os.Rename(tmpfile.Name(), fi.Location); err != nil { if err := os.Rename(tmpfile.Name(), fi.Path); err != nil {
if _, ok := err.(*os.PathError); ok { if _, ok := err.(*os.PathError); ok {
err.(*os.PathError).Path = fi.Name err.(*os.PathError).Path = fi.Name
} }
@@ -145,7 +147,7 @@ func (s *LocalStorage) Create(r io.Reader) (*FileInfo, error) {
// Open открывает файл из каталога. // Open открывает файл из каталога.
func (s *LocalStorage) Open(name string) (*os.File, error) { func (s *LocalStorage) Open(name string) (*os.File, error) {
// Полное имя для доступа к файлу // Полное имя для доступа к файлу
fullName := s.GetFullName(name) fullName := s.GetPath(name)
if fullName == "" { if fullName == "" {
return nil, os.ErrNotExist return nil, os.ErrNotExist
} }
@@ -185,7 +187,7 @@ func (s *LocalStorage) Remove(name string) error {
defer mu.Unlock() defer mu.Unlock()
// Полное имя для доступа к файлу // Полное имя для доступа к файлу
fullName := s.GetFullName(name) fullName := s.GetPath(name)
if fullName == "" { if fullName == "" {
return os.ErrNotExist return os.ErrNotExist
} }
@@ -275,7 +277,12 @@ func (s *LocalStorage) getMutex(name string) *sync.Mutex {
} }
// GetFullName возвращает полный путь к файлу в хранилище. // GetFullName возвращает полный путь к файлу в хранилище.
func (s *LocalStorage) GetFullName(name string) string { //
// Deprecated: GetFullName is no longer recommended. Use GetPath instead.
func (s *LocalStorage) GetFullName(name string) string { return s.GetPath(name) }
// GetPath возвращает полный путь к файлу в хранилище.
func (s *LocalStorage) GetPath(name string) string {
name = strings.TrimPrefix(name, "/") name = strings.TrimPrefix(name, "/")
if len(name) < 27 { if len(name) < 27 {
return "" return ""
@@ -285,7 +292,7 @@ func (s *LocalStorage) GetFullName(name string) string {
// IsExists проверяет: существует ли файл в хранилище? // IsExists проверяет: существует ли файл в хранилище?
func (s *LocalStorage) IsExists(name string) bool { func (s *LocalStorage) IsExists(name string) bool {
fullName := s.GetFullName(name) fullName := s.GetPath(name)
if fullName == "" { if fullName == "" {
return false return false
} }