fix: IsExists
This commit is contained in:
@@ -5,7 +5,6 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"git.company.local/gopkg/filestore/remote"
|
"git.company.local/gopkg/filestore/remote"
|
||||||
"github.com/minio/minio-go/v7"
|
"github.com/minio/minio-go/v7"
|
||||||
@@ -81,45 +80,13 @@ func (s *MinioStorage) Stat(name string) (remote.FileInfo, error) {
|
|||||||
return newMinioFileInfo(info), nil
|
return newMinioFileInfo(info), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MinioStorage) Exists(name string) (bool, error) {
|
func (s *MinioStorage) IsExists(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) {
|
|
||||||
name = path.Join(s.cfg.Prefix, name)
|
name = path.Join(s.cfg.Prefix, name)
|
||||||
|
|
||||||
_, err := s.client.StatObject(s.ctx, s.cfg.BucketName, name, minio.StatObjectOptions{})
|
_, err := s.client.StatObject(s.ctx, s.cfg.BucketName, name, minio.StatObjectOptions{})
|
||||||
if err == nil {
|
if err != nil {
|
||||||
return true, nil
|
return false, err
|
||||||
}
|
}
|
||||||
if strings.Contains(err.Error(), "The specified key does not exist.") {
|
|
||||||
return false, nil
|
return true, nil
|
||||||
}
|
|
||||||
return false, err
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-8
@@ -32,14 +32,8 @@ type Storage interface {
|
|||||||
// Stat получает информацию о файле/каталоге.
|
// Stat получает информацию о файле/каталоге.
|
||||||
Stat(name string) (FileInfo, error)
|
Stat(name string) (FileInfo, error)
|
||||||
|
|
||||||
// Exists определяет, существует ли файл или каталог.
|
// IsExists определяет, существует ли файл.
|
||||||
Exists(name string) (bool, error)
|
IsExists(name string) (bool, error)
|
||||||
|
|
||||||
// IsDir определяет, является ли путь каталогом.
|
|
||||||
IsDir(name string) (bool, error)
|
|
||||||
|
|
||||||
// IsFile определяет, является ли путь файлом.
|
|
||||||
IsFile(name string) (bool, error)
|
|
||||||
|
|
||||||
Uploader() Uploader
|
Uploader() Uploader
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-4
@@ -393,16 +393,20 @@ func (s *LocalStorage) GetFullPath(name string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IsExists проверяет существование файла.
|
// IsExists проверяет существование файла.
|
||||||
func (s *LocalStorage) IsExists(name string) bool {
|
func (s *LocalStorage) IsExists(name string) (bool, error) {
|
||||||
fullPath, err := s.GetFullPath(name)
|
fullPath, err := s.GetFullPath(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
fi, err := os.Stat(fullPath)
|
fi, err := os.Stat(fullPath)
|
||||||
if err != nil {
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user