github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/filesystem/driver/handler.go (about)

     1  package driver
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	model "github.com/cloudreve/Cloudreve/v3/models"
     7  	"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/fsctx"
     8  	"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/response"
     9  	"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
    10  )
    11  
    12  var (
    13  	ErrorThumbNotExist     = fmt.Errorf("thumb not exist")
    14  	ErrorThumbNotSupported = fmt.Errorf("thumb not supported")
    15  )
    16  
    17  // Handler 存储策略适配器
    18  type Handler interface {
    19  	// 上传文件, dst为文件存储路径,size 为文件大小。上下文关闭
    20  	// 时,应取消上传并清理临时文件
    21  	Put(ctx context.Context, file fsctx.FileHeader) error
    22  
    23  	// 删除一个或多个给定路径的文件,返回删除失败的文件路径列表及错误
    24  	Delete(ctx context.Context, files []string) ([]string, error)
    25  
    26  	// 获取文件内容
    27  	Get(ctx context.Context, path string) (response.RSCloser, error)
    28  
    29  	// 获取缩略图,可直接在ContentResponse中返回文件数据流,也可指
    30  	// 定为重定向
    31  	// 	如果缩略图不存在, 且需要 Cloudreve 代理生成并上传,应返回 ErrorThumbNotExist,生
    32  	//  成的缩略图文件存储规则与本机策略一致。
    33  	// 	如果不支持此文件的缩略图,并且不希望后续继续请求此缩略图,应返回 ErrorThumbNotSupported
    34  	Thumb(ctx context.Context, file *model.File) (*response.ContentResponse, error)
    35  
    36  	// 获取外链/下载地址,
    37  	// url - 站点本身地址,
    38  	// isDownload - 是否直接下载
    39  	Source(ctx context.Context, path string, ttl int64, isDownload bool, speed int) (string, error)
    40  
    41  	// Token 获取有效期为ttl的上传凭证和签名
    42  	Token(ctx context.Context, ttl int64, uploadSession *serializer.UploadSession, file fsctx.FileHeader) (*serializer.UploadCredential, error)
    43  
    44  	// CancelToken 取消已经创建的有状态上传凭证
    45  	CancelToken(ctx context.Context, uploadSession *serializer.UploadSession) error
    46  
    47  	// List 递归列取远程端path路径下文件、目录,不包含path本身,
    48  	// 返回的对象路径以path作为起始根目录.
    49  	// recursive - 是否递归列出
    50  	List(ctx context.Context, path string, recursive bool) ([]response.Object, error)
    51  }