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  }