# ClientView (/client) 文件管理架构分析 **生成时间**: 2026-10-12 **确认**: MarkBase API + SFTPGo 存储系统 --- ## ✅ 结论 **ClientView (/client) 使用的文件管理不是 `~/markbase`,而是 `~/momentry/var/sftpgo/data/`** --- ## 📊 架构详解 ### 1. ClientView 路由 **路径**: `/client` **组件**: `src/views/ClientView.vue` **用途**: 文件管理界面(上传、下载、移动、删除) --- ### 2. API 端点 **ClientView 直接调用 MarkBase API**: ```typescript // ClientView.vue:254-255 const MARKBASE_URL = detectMarkbaseUrl() // http://localhost:11438 const API_BASE = MARKBASE_URL + '/api/v2' // 实际调用的端点: /api/v2/myfiles/{username}/folders // 获取文件夹列表 /api/v2/myfiles/{username}/files // 获取文件列表 /api/v2/upload-unlimited/{username} // 上传文件 ``` **关键代码**: ```typescript // ClientView.vue:247-253 function detectMarkbaseUrl(): string { const stored = (window as any).__MARKBASE_URL__ || localStorage.getItem('markbase_url') if (stored) return stored const hostname = window.location.hostname if (hostname === 'localhost' || hostname === '127.0.0.1') return 'http://localhost:11438' return window.location.origin } ``` --- ### 3. 文件存储位置 **实际文件存储路径**: ``` /Users/accusys/momentry/var/sftpgo/data/demo/ ``` **目录结构**: ``` /Users/accusys/momentry/var/sftpgo/data/ ├── demo/ # demo 用户的文件 │ ├── 001.mp4 │ ├── 002.mp4 │ ├── ... │ └── 118.mp4 └── {other_users}/ # 其他用户的文件(如果有) ``` **验证**: ```bash ls -lh /Users/accusys/momentry/var/sftpgo/data/demo/*.mp4 | head -5 # 输出: # 001.mp4 (26M) # 002.mp4 (3.6M) # 003.mp4 (4.4M) # ... ``` --- ### 4. MarkBase API 配置 **MarkBase 数据目录**: ``` /Users/accusys/markbase/data/ ├── auth.sqlite # 认证数据库 ├── authorized_keys # SSH 公钥 └── ... ``` **注意**: MarkBase 数据目录 (`~/markbase/data/`) 用于存储 **MarkBase 自身的数据**(认证、配置等),**不是文件存储位置**。 --- ### 5. 配置文件映射 **admin_config.json**: ```json { "server": { "storage_root": "/Users/accusys/momentry/var/sftpgo/data" } } ``` **环境变量**: ```bash STORAGE_ROOT=/Users/accusys/momentry/var/sftpgo/data ``` --- ## 📁 路径关系图 ``` ClientView (/client) │ ├─> MarkBase API (:11438) │ └─> /api/v2/myfiles/{user}/* │ └─> 读取 storage_root 配置 │ └─> /Users/accusys/momentry/var/sftpgo/data/{user}/ │ └─> 文件实际存储位置 └─> ~/momentry/var/sftpgo/data/demo/ ``` --- ## 🔍 关键区别 ### `~/markbase` 目录 **用途**: MarkBase 项目代码和自身数据 **内容**: - MarkBase Core 源代码 - MarkBase 数据库 (`auth.sqlite`) - MarkBase 配置文件 **不是文件存储位置** ❌ --- ### `~/momentry/var/sftpgo/data` 目录 **用途**: 实际的文件存储位置 **内容**: - 用户上传的文件 - 文件夹结构 - 视频文件 (*.mp4) **这是 ClientView 管理的文件** ✅ --- ## 🛠️ 动态路径实现 **paths.rs 中的路径函数**: ```rust /// Get storage root directory /// Priority: STORAGE_ROOT env var > ~/momentry/var/sftpgo/data pub fn get_storage_root() -> String { env::var("STORAGE_ROOT") .unwrap_or_else(|_| { format!("{}/momentry/var/sftpgo/data", get_home_dir().display()) }) } ``` **m4promini 环境路径**: ```bash # 自动推断: /Users/nextorageai/momentry/var/sftpgo/data/demo/ # 或通过环境变量: export STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data ``` --- ## 📝 总结 | 项目 | 值 | |-----|---| | **ClientView 路由** | `/client` | | **API 服务** | MarkBase API (localhost:11438) | | **API 端点** | `/api/v2/myfiles/{user}/*` | | **文件存储位置** | `~/momentry/var/sftpgo/data/{user}/` | | **当前环境 (m5max48)** | `/Users/accusys/momentry/var/sftpgo/data/demo/` | | **目标环境 (m4promini)** | `/Users/nextorageai/momentry/var/sftpgo/data/demo/` | | **配置键** | `STORAGE_ROOT` 环境变量 | | **配置文件** | `admin_config.json` → `server.storage_root` | --- ## ⚠️ 重要提示 **部署到新环境时需要**: 1. ✅ 创建存储目录: ```bash mkdir -p ~/momentry/var/sftpgo/data/demo ``` 2. ✅ 设置权限: ```bash chmod -R 755 ~/momentry/var/sftpgo/data ``` 3. ✅ 配置环境变量: ```bash export STORAGE_ROOT=~/momentry/var/sftpgo/data ``` 4. ✅ 确保 MarkBase API 有读取权限 --- **ClientView 文件管理 ≠ `~/markbase`** **ClientView 文件管理 = `~/momentry/var/sftpgo/data`**