Documentation
¶
Overview ¶
Package webdavfs 是 WebDAV 协议壳:把 vfs.FileSystem 翻译成 golang.org/x/net/webdav 需要的 FileSystem / File,并提供 HTTP 外壳 (Basic 认证、上传体长闸门、目录级 MOVE/COPY 退化)。
本包是唯一允许 import webdav 的地方;它不直接调用 S3。
Index ¶
- type Config
- type FileSystem
- func (fs *FileSystem) Mkdir(ctx context.Context, name string, perm os.FileMode) error
- func (fs *FileSystem) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (webdav.File, error)
- func (fs *FileSystem) RemoveAll(ctx context.Context, name string) error
- func (fs *FileSystem) Rename(ctx context.Context, oldName, newName string) error
- func (fs *FileSystem) SetLogger(l *log.Logger)
- func (fs *FileSystem) Stat(ctx context.Context, name string) (os.FileInfo, error)
- type Server
- type UserEntry
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// 单用户模式:该文件系统 + 一对 Basic 凭据。
FileSystem *FileSystem
User string
Password string
// Users 是多用户路由表(每用户一个已构建好的 FileSystem)。非空时启用
// 多用户模式,上方 FileSystem/User/Password 必须为空。
Users []UserEntry
// MaxUploadSize 是请求体上限(字节);<= 0 表示不限制。
MaxUploadSize int64
// MaxUploadSizeText 是上限的人类可读文本,只用于 413 指引文案。
MaxUploadSizeText string
// Logger 为空则不记录访问日志。
Logger *log.Logger
// PrewarmDirs 是单用户模式下需要后台预热的目录路径(逻辑路径,如 "/yiche")。
// 多用户模式下每个用户自己的预热目录在 UserEntry.PrewarmDirs 里。
// 首个请求到达时启动,按缓存 TTL 周期刷新,让超大目录在用户访问前
// 就处于热状态——它们的首次列举可能长达数十秒。
PrewarmDirs []string
}
Config 是 WebDAV HTTP 外壳的构造参数。单用户模式填 FileSystem/User/Password; 多用户模式填 Users,两种模式互斥。
type FileSystem ¶
type FileSystem struct {
// contains filtered or unexported fields
}
FileSystem 把 vfs.FileSystem 适配成 webdav.FileSystem。
func New ¶
func New(core vfs.FileSystem) *FileSystem
New 包装内核。内核与壳共享同一 bucket,壳不持有任何 S3 客户端。 不开目录列表缓存(单次请求内的重复 Stat 仍走请求级 readCache)。
func NewWithListingCache ¶
func NewWithListingCache(core vfs.FileSystem, ttl time.Duration) *FileSystem
NewWithListingCache 同 New,但开启服务级目录列表缓存。 ttl <= 0 等同 New(不缓存)。 预热通过 Server 的 Config.PrewarmDirs 驱动(见 Server.prewarmDirs)。
func (*FileSystem) Mkdir ¶
Mkdir 写一个 0 字节、key 以 "/" 结尾的目录标记对象:否则 Finder/Explorer 里新建的文件夹刷新即消失(S3 没有目录,共同前缀无法自证存在)。
已存在时按 os.Mkdir 语义返回 ErrExist(webdav 映射成 405):既避免覆盖已有 目录,也避免在同名文件旁多出一个 "x/" 标记对象、让列表里出现两条同名项。
func (*FileSystem) OpenFile ¶
func (fs *FileSystem) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (webdav.File, error)
OpenFile 实现 webdav.FileSystem。读路径不做任何 S3 请求: 元信息来自请求级缓存,真正的 GetObject 推迟到第一次 Read/Seek。
func (*FileSystem) RemoveAll ¶
func (fs *FileSystem) RemoveAll(ctx context.Context, name string) error
RemoveAll 实现 webdav.FileSystem。webdav 的 DELETE 一律走这里, 目录删除等价于删掉该前缀下的全部对象(含目录标记对象)。
func (*FileSystem) Rename ¶
func (fs *FileSystem) Rename(ctx context.Context, oldName, newName string) error
Rename 实现 webdav.FileSystem。目录级由 HTTP 外壳提前拦成 501, 内核的 ErrNotSupported 只是兜底。
func (*FileSystem) SetLogger ¶ added in v0.1.3
func (fs *FileSystem) SetLogger(l *log.Logger)
SetLogger 注入异步路径的日志器。须在开始服务前调用一次(只在构造期写入, 不做并发保护)。