fix: IsExists
This commit is contained in:
@@ -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
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user