From 0982347f407ad56f401276b5ff576777273ca27c Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Wed, 27 Nov 2019 19:14:13 +0800 Subject: [PATCH] Fix: folder with the same name should not be created --- assets | 2 +- middleware/session.go | 7 ++++++- pkg/filesystem/errors.go | 3 ++- pkg/filesystem/path.go | 6 ++++++ pkg/serializer/error.go | 2 ++ 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/assets b/assets index 341a70e..79aaeb9 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 341a70e7c8d451fa8c627786434cb5f617fd2f26 +Subproject commit 79aaeb9e3a02dab9133f39f872602414b0ab57a0 diff --git a/middleware/session.go b/middleware/session.go index 14e3b3f..239eb70 100644 --- a/middleware/session.go +++ b/middleware/session.go @@ -1,8 +1,10 @@ package middleware import ( + "github.com/HFO4/cloudreve/pkg/util" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/memstore" + "github.com/gin-contrib/sessions/redis" "github.com/gin-gonic/gin" ) @@ -11,7 +13,10 @@ var Store memstore.Store // Session 初始化session func Session(secret string) gin.HandlerFunc { - Store = memstore.NewStore([]byte(secret)) + Store, err := redis.NewStore(10, "tcp", "127.0.0.1:6379", "52121225", []byte("secret")) + if err != nil { + util.Log().Panic("无法连接到Redis:%s", err) + } // Also set Secure: true if using SSL, you should though Store.Options(sessions.Options{HttpOnly: true, MaxAge: 7 * 86400, Path: "/"}) return sessions.Sessions("cloudreve-session", Store) diff --git a/pkg/filesystem/errors.go b/pkg/filesystem/errors.go index 913fe82..078cf5c 100644 --- a/pkg/filesystem/errors.go +++ b/pkg/filesystem/errors.go @@ -12,7 +12,8 @@ var ( ErrInsufficientCapacity = errors.New("容量空间不足") ErrIllegalObjectName = errors.New("目标名称非法") ErrInsertFileRecord = serializer.NewError(serializer.CodeDBError, "无法插入文件记录", nil) - ErrFileExisted = errors.New("同名文件已存在") + ErrFileExisted = serializer.NewError(serializer.CodeObjectExist, "同名文件已存在", nil) + ErrFolderExisted = serializer.NewError(serializer.CodeObjectExist, "同名目录已存在", nil) ErrPathNotExist = serializer.NewError(404, "路径不存在", nil) ErrObjectNotExist = serializer.NewError(404, "文件不存在", nil) ErrIO = serializer.NewError(serializer.CodeIOFailed, "无法读取文件数据", nil) diff --git a/pkg/filesystem/path.go b/pkg/filesystem/path.go index a06b7fe..7434a93 100644 --- a/pkg/filesystem/path.go +++ b/pkg/filesystem/path.go @@ -107,6 +107,12 @@ func (fs *FileSystem) CreateDirectory(ctx context.Context, fullPath string) erro return ErrPathNotExist } + // 是否有同名目录 + b, _ := fs.IsPathExist(fullPath) + if b { + return ErrFolderExisted + } + // 是否有同名文件 if ok, _ := fs.IsFileExist(path.Join(base, dir)); ok { return ErrFileExisted diff --git a/pkg/serializer/error.go b/pkg/serializer/error.go index 8621a36..c109afd 100644 --- a/pkg/serializer/error.go +++ b/pkg/serializer/error.go @@ -50,6 +50,8 @@ const ( CodeUploadFailed = 40002 // CodeCreateFolderFailed 目录创建失败 CodeCreateFolderFailed = 40003 + // CodeObjectExist 对象已存在 + CodeObjectExist = 40004 // CodeDBError 数据库操作失败 CodeDBError = 50001 // CodeEncryptError 加密失败