Files
momentry_studio/docs/CLIENTVIEW_STORAGE_ARCHITECTURE.md
Momentry Studio 14fe2eda07 docs: 确认 ClientView 文件存储架构
确认结论:
- 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 环境变量
2026-10-12 13:55:17 +08:00

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

⚠️ 重要提示

部署到新环境时需要:

  1. ✅ 创建存储目录:

    mkdir -p ~/momentry/var/sftpgo/data/demo
    
  2. ✅ 设置权限:

    chmod -R 755 ~/momentry/var/sftpgo/data
    
  3. ✅ 配置环境变量:

    export STORAGE_ROOT=~/momentry/var/sftpgo/data
    
  4. ✅ 确保 MarkBase API 有读取权限


ClientView 文件管理 ≠ ~/markbase
ClientView 文件管理 = ~/momentry/var/sftpgo/data