Init V4 community edition (#2265)
* Init V4 community edition * Init V4 community edition
This commit is contained in:
122
pkg/filemanager/driver/handler.go
Normal file
122
pkg/filemanager/driver/handler.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package driver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/boolset"
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs"
|
||||
)
|
||||
|
||||
const (
|
||||
// HandlerCapabilityProxyRequired this handler requires Cloudreve's proxy to get file content
|
||||
HandlerCapabilityProxyRequired HandlerCapability = iota
|
||||
// HandlerCapabilityInboundGet this handler supports directly get file's RSCloser, usually
|
||||
// indicates that the file is stored in the same machine as Cloudreve
|
||||
HandlerCapabilityInboundGet
|
||||
// HandlerCapabilityUploadSentinelRequired this handler does not support compliance callback mechanism,
|
||||
// thus it requires Cloudreve's sentinel to guarantee the upload is under control. Cloudreve will try
|
||||
// to delete the placeholder file and cancel the upload session if upload callback is not made after upload
|
||||
// session expire.
|
||||
HandlerCapabilityUploadSentinelRequired
|
||||
)
|
||||
|
||||
type (
|
||||
MetaType string
|
||||
MediaMeta struct {
|
||||
Key string `json:"key"`
|
||||
Value string `json:"value"`
|
||||
Type MetaType `json:"type"`
|
||||
}
|
||||
|
||||
HandlerCapability int
|
||||
|
||||
GetSourceArgs struct {
|
||||
Expire *time.Time
|
||||
IsDownload bool
|
||||
Speed int64
|
||||
DisplayName string
|
||||
}
|
||||
|
||||
// Handler 存储策略适配器
|
||||
Handler interface {
|
||||
// 上传文件, dst为文件存储路径,size 为文件大小。上下文关闭
|
||||
// 时,应取消上传并清理临时文件
|
||||
Put(ctx context.Context, file *fs.UploadRequest) error
|
||||
|
||||
// 删除一个或多个给定路径的文件,返回删除失败的文件路径列表及错误
|
||||
Delete(ctx context.Context, files ...string) ([]string, error)
|
||||
|
||||
// Open physical files. Only implemented if HandlerCapabilityInboundGet capability is set.
|
||||
// Returns file path and an os.File object.
|
||||
Open(ctx context.Context, path string) (*os.File, error)
|
||||
|
||||
// LocalPath returns the local path of a file.
|
||||
// Only implemented if HandlerCapabilityInboundGet capability is set.
|
||||
LocalPath(ctx context.Context, path string) string
|
||||
|
||||
// Thumb returns the URL for a thumbnail of given entity.
|
||||
Thumb(ctx context.Context, expire *time.Time, ext string, e fs.Entity) (string, error)
|
||||
|
||||
// 获取外链/下载地址,
|
||||
// url - 站点本身地址,
|
||||
// isDownload - 是否直接下载
|
||||
Source(ctx context.Context, e fs.Entity, args *GetSourceArgs) (string, error)
|
||||
|
||||
// Token 获取有效期为ttl的上传凭证和签名
|
||||
Token(ctx context.Context, uploadSession *fs.UploadSession, file *fs.UploadRequest) (*fs.UploadCredential, error)
|
||||
|
||||
// CancelToken 取消已经创建的有状态上传凭证
|
||||
CancelToken(ctx context.Context, uploadSession *fs.UploadSession) error
|
||||
|
||||
// CompleteUpload completes a previously created upload session.
|
||||
CompleteUpload(ctx context.Context, session *fs.UploadSession) error
|
||||
|
||||
// List 递归列取远程端path路径下文件、目录,不包含path本身,
|
||||
// 返回的对象路径以path作为起始根目录.
|
||||
// recursive - 是否递归列出
|
||||
// List(ctx context.Context, path string, recursive bool) ([]response.Object, error)
|
||||
|
||||
// Capabilities returns the capabilities of this handler
|
||||
Capabilities() *Capabilities
|
||||
|
||||
// MediaMeta extracts media metadata from the given file.
|
||||
MediaMeta(ctx context.Context, path, ext string) ([]MediaMeta, error)
|
||||
}
|
||||
|
||||
Capabilities struct {
|
||||
StaticFeatures *boolset.BooleanSet
|
||||
// MaxSourceExpire indicates the maximum allowed expiration duration of a source URL
|
||||
MaxSourceExpire time.Duration
|
||||
// MinSourceExpire indicates the minimum allowed expiration duration of a source URL
|
||||
MinSourceExpire time.Duration
|
||||
// MediaMetaSupportedExts indicates the extensions of files that support media metadata. Empty list
|
||||
// indicates that no file supports extracting media metadata.
|
||||
MediaMetaSupportedExts []string
|
||||
// GenerateMediaMeta indicates whether to generate media metadata using local generators.
|
||||
MediaMetaProxy bool
|
||||
// ThumbSupportedExts indicates the extensions of files that support thumbnail generation. Empty list
|
||||
// indicates that no file supports thumbnail generation.
|
||||
ThumbSupportedExts []string
|
||||
// ThumbSupportAllExts indicates whether to generate thumbnails for all files, regardless of their extensions.
|
||||
ThumbSupportAllExts bool
|
||||
// ThumbMaxSize indicates the maximum allowed size of a thumbnail. 0 indicates that no limit is set.
|
||||
ThumbMaxSize int64
|
||||
// ThumbProxy indicates whether to generate thumbnails using local generators.
|
||||
ThumbProxy bool
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
MetaTypeExif MetaType = "exif"
|
||||
MediaTypeMusic MetaType = "music"
|
||||
MetaTypeStreamMedia MetaType = "stream"
|
||||
)
|
||||
|
||||
type ForceUsePublicEndpointCtx struct{}
|
||||
|
||||
// WithForcePublicEndpoint sets the context to force using public endpoint for supported storage policies.
|
||||
func WithForcePublicEndpoint(ctx context.Context, value bool) context.Context {
|
||||
return context.WithValue(ctx, ForceUsePublicEndpointCtx{}, value)
|
||||
}
|
||||
Reference in New Issue
Block a user