mirror of https://github.com/cloudreve/Cloudreve
				
				
				
			
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
package explorer
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"github.com/HFO4/cloudreve/pkg/filesystem"
 | 
						|
	"github.com/HFO4/cloudreve/pkg/serializer"
 | 
						|
	"github.com/gin-gonic/gin"
 | 
						|
)
 | 
						|
 | 
						|
// ItemMoveService 处理多文件/目录移动
 | 
						|
type ItemMoveService struct {
 | 
						|
	SrcDir string      `json:"src_dir" binding:"required,min=1,max=65535"`
 | 
						|
	Src    ItemService `json:"src" binding:"exists"`
 | 
						|
	Dst    string      `json:"dst" binding:"required,min=1,max=65535"`
 | 
						|
}
 | 
						|
 | 
						|
// ItemRenameService 处理多文件/目录重命名
 | 
						|
type ItemRenameService struct {
 | 
						|
	Src     ItemService `json:"src" binding:"exists"`
 | 
						|
	NewName string      `json:"new_name" binding:"required,min=1,max=255"`
 | 
						|
}
 | 
						|
 | 
						|
// ItemService 处理多文件/目录相关服务
 | 
						|
type ItemService struct {
 | 
						|
	Items []uint `json:"items" binding:"exists"`
 | 
						|
	Dirs  []uint `json:"dirs" binding:"exists"`
 | 
						|
}
 | 
						|
 | 
						|
// Delete 删除对象
 | 
						|
func (service *ItemService) Delete(ctx context.Context, c *gin.Context) serializer.Response {
 | 
						|
	// 创建文件系统
 | 
						|
	fs, err := filesystem.NewFileSystemFromContext(c)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodePolicyNotAllowed, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	// 删除对象
 | 
						|
	err = fs.Delete(ctx, service.Dirs, service.Items)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodeNotSet, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	return serializer.Response{
 | 
						|
		Code: 0,
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// Move 移动对象
 | 
						|
func (service *ItemMoveService) Move(ctx context.Context, c *gin.Context) serializer.Response {
 | 
						|
	// 创建文件系统
 | 
						|
	fs, err := filesystem.NewFileSystemFromContext(c)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodePolicyNotAllowed, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	// 移动对象
 | 
						|
	err = fs.Move(ctx, service.Src.Dirs, service.Src.Items, service.SrcDir, service.Dst)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodeNotSet, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	return serializer.Response{
 | 
						|
		Code: 0,
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// Copy 复制对象
 | 
						|
func (service *ItemMoveService) Copy(ctx context.Context, c *gin.Context) serializer.Response {
 | 
						|
	// 复制操作只能对一个目录或文件对象进行操作
 | 
						|
	if len(service.Src.Items)+len(service.Src.Dirs) > 1 {
 | 
						|
		return serializer.ParamErr("只能复制一个对象", nil)
 | 
						|
	}
 | 
						|
 | 
						|
	// 创建文件系统
 | 
						|
	fs, err := filesystem.NewFileSystemFromContext(c)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodePolicyNotAllowed, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	// 复制对象
 | 
						|
	err = fs.Copy(ctx, service.Src.Dirs, service.Src.Items, service.SrcDir, service.Dst)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodeNotSet, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	return serializer.Response{
 | 
						|
		Code: 0,
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// Rename 重命名对象
 | 
						|
func (service *ItemRenameService) Rename(ctx context.Context, c *gin.Context) serializer.Response {
 | 
						|
	// 重命名作只能对一个目录或文件对象进行操作
 | 
						|
	if len(service.Src.Items)+len(service.Src.Dirs) > 1 {
 | 
						|
		return serializer.ParamErr("只能操作一个对象", nil)
 | 
						|
	}
 | 
						|
 | 
						|
	// 创建文件系统
 | 
						|
	fs, err := filesystem.NewFileSystemFromContext(c)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodePolicyNotAllowed, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	// 重命名对象
 | 
						|
	err = fs.Rename(ctx, service.Src.Dirs, service.Src.Items, service.NewName)
 | 
						|
	if err != nil {
 | 
						|
		return serializer.Err(serializer.CodeNotSet, err.Error(), err)
 | 
						|
	}
 | 
						|
 | 
						|
	return serializer.Response{
 | 
						|
		Code: 0,
 | 
						|
	}
 | 
						|
}
 |