fix: IsExists

This commit is contained in:
2026-05-05 11:13:53 +03:00
parent 2632ad880d
commit b95d23e9c8
3 changed files with 15 additions and 50 deletions
+5 -38
View File
@@ -5,7 +5,6 @@ import (
"io"
"net/http"
"path"
"strings"
"git.company.local/gopkg/filestore/remote"
"github.com/minio/minio-go/v7"
@@ -81,45 +80,13 @@ func (s *MinioStorage) Stat(name string) (remote.FileInfo, error) {
return newMinioFileInfo(info), nil
}
func (s *MinioStorage) Exists(name string) (bool, error) {
name = path.Join(s.cfg.Prefix, name)
// Сначала проверяем, является ли путь файлом
if ok, err := s.IsFile(name); err == nil && ok {
return true, nil
}
// Если не файл, то проверяем, является ли путь каталогом
return s.IsDir(name)
}
func (s *MinioStorage) IsDir(name string) (bool, error) {
name = path.Join(s.cfg.Prefix, name)
options := minio.ListObjectsOptions{
Prefix: strings.TrimRight(name, "/") + "/",
Recursive: false,
MaxKeys: 1,
}
objectChan := s.client.ListObjects(s.ctx, s.cfg.BucketName, options)
object, ok := <-objectChan
if !ok {
return false, nil
}
if object.Err != nil {
return false, object.Err
}
return true, nil
}
func (s *MinioStorage) IsFile(name string) (bool, error) {
func (s *MinioStorage) IsExists(name string) (bool, error) {
name = path.Join(s.cfg.Prefix, name)
_, err := s.client.StatObject(s.ctx, s.cfg.BucketName, name, minio.StatObjectOptions{})
if err == nil {
return true, nil
if err != nil {
return false, err
}
if strings.Contains(err.Error(), "The specified key does not exist.") {
return false, nil
}
return false, err
return true, nil
}
+2 -8
View File
@@ -32,14 +32,8 @@ type Storage interface {
// Stat получает информацию о файле/каталоге.
Stat(name string) (FileInfo, error)
// Exists определяет, существует ли файл или каталог.
Exists(name string) (bool, error)
// IsDir определяет, является ли путь каталогом.
IsDir(name string) (bool, error)
// IsFile определяет, является ли путь файлом.
IsFile(name string) (bool, error)
// IsExists определяет, существует ли файл.
IsExists(name string) (bool, error)
Uploader() Uploader
}
+8 -4
View File
@@ -393,16 +393,20 @@ func (s *LocalStorage) GetFullPath(name string) (string, error) {
}
// IsExists проверяет существование файла.
func (s *LocalStorage) IsExists(name string) bool {
func (s *LocalStorage) IsExists(name string) (bool, error) {
fullPath, err := s.GetFullPath(name)
if err != nil {
return false
return false, err
}
fi, err := os.Stat(fullPath)
if err != nil {
return false
return false, err
}
return !fi.IsDir()
if fi.IsDir() {
return false, fmt.Errorf("The specified file is a directory")
}
return true, nil
}