github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/service/explorer/directory.go (about) 1 package explorer 2 3 import ( 4 "context" 5 6 "github.com/cloudreve/Cloudreve/v3/pkg/filesystem" 7 "github.com/cloudreve/Cloudreve/v3/pkg/serializer" 8 "github.com/gin-gonic/gin" 9 ) 10 11 // DirectoryService 创建新目录服务 12 type DirectoryService struct { 13 Path string `uri:"path" json:"path" binding:"required,min=1,max=65535"` 14 } 15 16 // ListDirectory 列出目录内容 17 func (service *DirectoryService) ListDirectory(c *gin.Context) serializer.Response { 18 // 创建文件系统 19 fs, err := filesystem.NewFileSystemFromContext(c) 20 if err != nil { 21 return serializer.Err(serializer.CodeCreateFSError, "", err) 22 } 23 defer fs.Recycle() 24 25 // 上下文 26 ctx, cancel := context.WithCancel(context.Background()) 27 defer cancel() 28 29 // 获取子项目 30 objects, err := fs.List(ctx, service.Path, nil) 31 if err != nil { 32 return serializer.Err(serializer.CodeNotSet, err.Error(), err) 33 } 34 35 var parentID uint 36 if len(fs.DirTarget) > 0 { 37 parentID = fs.DirTarget[0].ID 38 } 39 40 return serializer.Response{ 41 Code: 0, 42 Data: serializer.BuildObjectList(parentID, objects, fs.Policy), 43 } 44 } 45 46 // CreateDirectory 创建目录 47 func (service *DirectoryService) CreateDirectory(c *gin.Context) serializer.Response { 48 // 创建文件系统 49 fs, err := filesystem.NewFileSystemFromContext(c) 50 if err != nil { 51 return serializer.Err(serializer.CodeCreateFSError, "", err) 52 } 53 defer fs.Recycle() 54 55 // 上下文 56 ctx, cancel := context.WithCancel(context.Background()) 57 defer cancel() 58 59 // 创建目录 60 _, err = fs.CreateDirectory(ctx, service.Path) 61 if err != nil { 62 return serializer.Err(serializer.CodeCreateFolderFailed, err.Error(), err) 63 } 64 return serializer.Response{ 65 Code: 0, 66 } 67 68 }