11# MediaDrive Pro
22
3- 基于对象存储的私有云网盘系统,提供 Web UI、WebDAV、HTTP API、文件分享等功能。
3+ 基于对象存储的私有云网盘系统,提供 Web UI、WebDAV、HTTP API、图床、 文件分享等功能。
44
55## 功能
66
99- ** 分片上传** — 大文件自动分片,断点续传,并行上传
1010- ** 文件预览** — 图片/视频/音频/PDF/文本 在线预览
1111- ** 文件分享** — 生成分享链接,支持密码保护、过期时间、下载次数限制
12+ - ** 图床** — 图片上传自动压缩为 WebP + 生成缩略图,返回 URL/Markdown 链接,支持防盗链,兼容 PicGo
1213- ** WebDAV** — 挂载为本地磁盘(Windows/macOS/Linux/移动端)
13- - ** API Token** — 创建独立 Token 用于 WebDAV 或第三方集成
14+ - ** API Token** — 创建独立 Token 用于 WebDAV、图床或第三方集成
1415- ** 管理面板** — 管理员查看所有用户及存储使用
1516
1617## 技术栈
@@ -99,6 +100,12 @@ access_token_ttl_secs = 1800
99100[webdav ]
100101enabled = true
101102prefix = " /dav"
103+
104+ [image ]
105+ max_upload_size = 20971520 # 20MB
106+ compression_quality = 80 # WebP 压缩质量 (1-100)
107+ cdn_base_url = " " # 留空则使用服务器自身地址
108+ allowed_referers = [] # 防盗链白名单,留空则不限制
102109```
103110
104111支持环境变量覆盖(` MDP_ ` 前缀):
@@ -114,11 +121,12 @@ Web 界面包含以下页面:
114121| 页面 | 路径 | 说明 |
115122| ---| ---| ---|
116123| 登录 | ` /login ` | 用户名 + 密码登录 |
117- | 注册 | ` /register ` | 创建新账号 |
124+ | 注册 | ` /register ` | 创建新账号(多步骤向导 + 头像设置) |
118125| 文件浏览器 | ` /files ` | 文件/文件夹管理主页面 |
119126| 分享管理 | ` /shares ` | 查看和管理所有分享链接 |
127+ | 图床 | ` /images ` | 图片上传/管理,一键复制 URL/Markdown |
120128| Token 管理 | ` /tokens ` | 创建和管理 API Token |
121- | 用户设置 | ` /settings ` | 个人信息和存储空间用量 |
129+ | 用户设置 | ` /settings ` | 个人信息、头像和存储空间用量 |
122130| 管理员面板 | ` /admin ` | 用户列表(仅管理员) |
123131| 公开分享 | ` /s/:token ` | 访客查看/下载分享文件 |
124132
@@ -132,14 +140,16 @@ Web 界面包含以下页面:
132140
133141## API
134142
135- 所有接口以 ` /api/v1/ ` 为前缀,需 Bearer Token 认证(除注册/登录外)。
143+ 所有接口以 ` /api/v1/ ` 为前缀,需 Bearer Token 认证(除注册/登录外)。也支持 ` X-API-Token: username:token ` 头认证(用于 PicGo 等客户端)。
136144
137145### 认证
138146
139147```
140148POST /api/v1/auth/register — 注册
141149POST /api/v1/auth/login — 登录
142150GET /api/v1/auth/me — 当前用户信息
151+ POST /api/v1/auth/avatar — 上传头像
152+ GET /api/v1/users/:id/avatar — 获取用户头像
143153```
144154
145155### 文件
@@ -193,6 +203,18 @@ GET /api/v1/tokens — 列出所有 Token
193203DELETE /api/v1/tokens/:id — 删除 Token
194204```
195205
206+ ### 图床
207+
208+ ```
209+ POST /api/v1/images — 上传图片(自动压缩为 WebP + 生成缩略图)
210+ GET /api/v1/images — 列出已上传图片
211+ DELETE /api/v1/images/:id — 删除图片
212+ GET /img/:hash.webp — 公开访问图片(可配置防盗链)
213+ GET /img/thumb/:hash.webp — 缩略图
214+ ```
215+
216+ 上传响应包含 ` url ` 、` thumb_url ` 、` markdown ` 字段,方便直接使用。
217+
196218### 管理员
197219
198220```
@@ -232,6 +254,16 @@ curl -X POST http://localhost:8080/api/v1/files \
232254# 文件列表
233255curl http://localhost:8080/api/v1/files \
234256 -H " Authorization: Bearer <token>"
257+
258+ # 上传图片到图床(使用 JWT)
259+ curl -X POST http://localhost:8080/api/v1/images \
260+ -H " Authorization: Bearer <token>" \
261+ -F " image=@photo.jpg"
262+
263+ # 上传图片到图床(使用 API Token,适用于 PicGo 等客户端)
264+ curl -X POST http://localhost:8080/api/v1/images \
265+ -H " X-API-Token: demo:<api_token>" \
266+ -F " image=@photo.jpg"
235267```
236268
237269## 项目结构
@@ -245,7 +277,7 @@ MediaDrivePro/
245277│ ├── common/ # 配置、错误类型、响应格式
246278│ ├── auth/ # JWT、密码哈希、认证中间件
247279│ ├── storage/ # OpenDAL 存储封装
248- │ ├── core/ # 业务逻辑(用户/文件/目录/分享/Token/分片上传)
280+ │ ├── core/ # 业务逻辑(用户/文件/目录/分享/Token/图床/ 分片上传)
249281│ ├── api/ # HTTP 路由和处理器
250282│ └── webdav/ # WebDAV 协议实现(dav-server + Basic Auth)
251283└── web/ # 前端(React + Vite + TypeScript)
@@ -265,7 +297,7 @@ MediaDrivePro/
265297- [x] V0.2 — 网盘完善(重命名/移动、搜索排序、分享、存储配额)
266298- [x] V0.3 — WebDAV + 分片上传 + API Token
267299- [x] V1.0 — Web UI
268- - [ ] V1.1 — 图床
300+ - [x ] V1.1 — 图床(WebP 压缩 + 缩略图 + 防盗链 + PicGo 兼容)
269301- [ ] V2.0 — 视频播放 + 转码 + 媒体库
270302- [ ] V3.0 — 同步观影室
271303
0 commit comments