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 环境变量
This commit is contained in:
220
docs/CLIENTVIEW_STORAGE_ARCHITECTURE.md
Normal file
220
docs/CLIENTVIEW_STORAGE_ARCHITECTURE.md
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
# 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`**
|
||||||
Reference in New Issue
Block a user