переосмысление
This commit is contained in:
+21
-14
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user