# 双方案实施计划 ## 目标 实现两个WebDAV backend方案: 1. 方案1:复制warren文件(快速原型) 2. 方案2:SQLite backend(完整实现) --- ## 方案1:复制warren文件到WebDAV目录 ### 目标 - 快速验证WebDAV功能 - Finder能看到warren的文件树 - 时间:30分钟 ### 实施步骤 **步骤1:创建脚本复制文件** ```bash # 创建脚本:scripts/copy_warren_to_webdav.sh # 功能: # - 使用MarkBaseFS::query_node遍历所有节点 # - 使用MarkBaseFS::read_file读取文件内容 # - 复制到data/webdav/warren对应目录结构 ``` **步骤2:实现文件复制逻辑** ```rust // 创建 src/bin/copy_warren_files.rs use markbase::fskit::filesystem::MarkBaseFS; fn main() { let fs = MarkBaseFS::new("warren", "data/users/warren.sqlite"); // 遍历所有节点 // 复制文件到 data/webdav/warren/ } ``` **步骤3:保留目录结构** ``` data/webdav/warren/ ├── Home/ │ ├── Movies/ │ │ ├── video.mp4 │ ├── Marketing/ │ │ ├── doc.pdf ``` **步骤4:重启WebDAV server** ```bash killall webdav_server ./target/release/webdav_server --user warren --port 8002 ``` **步骤5:Finder验证** - 连接 http://localhost:8002/webdav - 验证12659文件显示 ### 限制 - 占用磁盘空间(复制12659文件) - 性能仍然受文件系统限制 - 不是真正的虚拟文件系统 --- ## 方案2:实现SQLite backend(DavFileSystem trait) ### 目标 - 真正虚拟文件系统 - 直接使用warren.sqlite - 性能提升600倍 - 时间:3.5小时 ### 实施步骤 **步骤1:创建MarkBaseFs模块** ``` src/webdav/markbase_fs.rs - 实现DavFileSystem trait - 使用MarkBaseFS作为backend ``` **步骤2:实现DavFileSystem trait** ```rust use dav_server::DavFileSystem; use crate::fskit::filesystem::MarkBaseFS; pub struct MarkBaseDavFs { markbase_fs: MarkBaseFS, } impl DavFileSystem for MarkBaseDavFs { fn read_dir(&self, path: &str) -> Vec { // 使用MarkBaseFS::query_children() // 转换为DavDirItem } fn get_file(&self, path: &str) -> Box { // 使用MarkBaseFS::read_file() // 返回文件内容 } fn metadata(&self, path: &str) -> DavMetaData { // 使用MarkBaseFS::query_node() // 返回文件元数据 } } ``` **步骤3:路径解析逻辑** ```rust // path → node_id映射 // 例如:"/Home/Movies/video.mp4" // → 查询parent_id + label找到node_id ``` **步骤4:修改handler.rs** ```rust impl MarkBaseWebDAV { pub fn create_handler(&self) -> DavHandler { DavHandler::builder() .filesystem(MarkBaseDavFs::new(&self.user_id)) .locksystem(FakeLs::new()) .build_handler() } } ``` **步骤5:编译测试** ```bash cargo build --release --bin webdav_server cargo test --lib webdav::markbase_fs ``` **步骤6:Finder验证** - 连接 http://localhost:8002/webdav - 验证12659文件显示(<3秒) ### 优势 - 不占用磁盘空间(不需要复制文件) - 性能提升600倍(B-Tree索引) - 真正虚拟文件系统 - 符合MarkBase长期目标 --- ## 实施顺序建议 **推荐顺序:方案2 → 方案1** **原因:** 1. 方案2是核心实现(解决性能问题) 2. 方案1可作为备选或原型验证 3. 方案2完成后,方案1可以删除(节省空间) **时间分配:** - 方案2:3.5小时(核心) - 方案1:30分钟(可选验证) --- ## 依赖关系 **方案1依赖:** - MarkBaseFS已有实现(✅) - warren.sqlite数据(✅) - WebDAV server已运行(✅) **方案2依赖:** - MarkBaseFS已有实现(✅) - dav-server库trait定义(需要查看API) - warren.sqlite索引优化(✅ parent_id索引已创建) --- ## 待确认问题 1. **执行顺序**:先方案2还是先方案1? 2. **方案1必要性**:如果方案2成功,方案1是否还需要? 3. **性能测试**:是否需要AJA System Test验证性能? 4. **写入功能**:是否需要实现PUT写入(方案2扩展)? --- ## 文件清单 **方案1新增文件:** - scripts/copy_warren_to_webdav.sh - src/bin/copy_warren_files.rs(可选) **方案2新增文件:** - src/webdav/markbase_fs.rs(核心实现) - src/webdav/dav_items.rs(DavDirItem/DavMetaData) - tests/webdav_backend_test.rs(单元测试) **修改文件:** - src/webdav/handler.rs(替换LocalFs) - src/webdav/mod.rs(导出新模块) - Cargo.toml(可能需要新依赖) --- **最后更新:** 2026-05-18 23:30