确认结论:
- ClientView (/client) 使用 MarkBase API
- 文件存储位置: ~/momentry/var/sftpgo/data/{user}/
- 不是 ~/markbase 目录
架构详解:
1. API 端点
- MarkBase API: localhost:11438
- /api/v2/myfiles/{user}/folders
- /api/v2/myfiles/{user}/files
2. 文件存储
- 实际路径: ~/momentry/var/sftpgo/data/demo/
- 包含所有上传的文件 (*.mp4)
3. MarkBase 目录
- ~/markbase/data/ 存储 MarkBase 自身数据
- 认证数据库 (auth.sqlite)
- 配置文件
- 不是文件存储位置
4. 配置映射
- admin_config.json: server.storage_root
- 环境变量: STORAGE_ROOT
关键区别:
- ~/markbase = MarkBase 项目代码和自身数据
- ~/momentry/var/sftpgo/data = 实际文件存储位置
部署注意:
- 需要创建 ~/momentry/var/sftpgo/data/{user}/
- 设置正确的权限
- 配置 STORAGE_ROOT 环境变量
4.7 KiB
4.7 KiB
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:
// 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} // 上传文件
关键代码:
// 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}/ # 其他用户的文件(如果有)
验证:
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:
{
"server": {
"storage_root": "/Users/accusys/momentry/var/sftpgo/data"
}
}
环境变量:
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 中的路径函数:
/// 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 环境路径:
# 自动推断:
/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 |
⚠️ 重要提示
部署到新环境时需要:
-
✅ 创建存储目录:
mkdir -p ~/momentry/var/sftpgo/data/demo -
✅ 设置权限:
chmod -R 755 ~/momentry/var/sftpgo/data -
✅ 配置环境变量:
export STORAGE_ROOT=~/momentry/var/sftpgo/data -
✅ 确保 MarkBase API 有读取权限
ClientView 文件管理 ≠ ~/markbase
ClientView 文件管理 = ~/momentry/var/sftpgo/data