docs: add project documentation files and version constant
Add AGENTS.md, docs/ (CHANGELOG, CHANGELOG_webui, README), and pkg/constant/version.go.
This commit is contained in:
+105
@@ -0,0 +1,105 @@
|
||||
# yDropbox
|
||||
|
||||
yDropbox 是一个自托管的轻量级文件存储服务(灵感来自 Dropbox),使用 Go 编写,编译为单一静态二进制文件,零外部依赖。它提供一个 Web 界面用于上传、管理、下载文件,并支持通过受密码保护和可过期的分享链接将文件分享给他人。
|
||||
|
||||
## 特性
|
||||
|
||||
- **单一二进制文件**:使用 `modernc.org/sqlite`(纯 Go 实现的 SQLite),无需 CGO,无需外部数据库或运行时依赖。
|
||||
- **工作区(Workspace)模型**:文件存储在工作区下的 `inbox/` 与 `outbox/` 两个目录中,文件元数据保存在 `.ydropbox/db.sqlite`。
|
||||
- **磁盘扫描同步**:内置扫描器每 10 秒扫描工作区目录,将磁盘上的新增文件登记进数据库,并移除已被删除文件的元数据。这意味着你也可以直接把文件放进目录,它们会被自动纳入管理。
|
||||
- **令牌认证**:服务端通过访问令牌(`--token` 或环境变量 `YDROPBOX_TOKEN`)保护,Web 端登录后使用 HttpOnly、Secure 的会话 Cookie。
|
||||
- **分享链接**:可为任意文件生成公开分享链接,支持可选密码保护与过期时间。
|
||||
- **基础防护**:登录与分享密码均带有失败次数限制(5 次失败后锁定 60 秒),分享密码使用 bcrypt 哈希存储。
|
||||
- **现代 Web UI**:基于 Alpine.js 的前端,支持拖拽上传、Toast 提示与响应式布局。
|
||||
|
||||
## 构建与运行
|
||||
|
||||
### 前置要求
|
||||
|
||||
- Go 1.25+
|
||||
|
||||
### 构建
|
||||
|
||||
```bash
|
||||
make build
|
||||
```
|
||||
|
||||
该命令会生成名为 `yDropbox` 的静态二进制文件(关闭 CGO)。
|
||||
|
||||
### 运行
|
||||
|
||||
```bash
|
||||
./yDropbox --addr 127.0.0.1:8999 --workspace ./workspace --token YOUR_SECRET_TOKEN
|
||||
```
|
||||
|
||||
或使用环境变量提供令牌:
|
||||
|
||||
```bash
|
||||
export YDROPBOX_TOKEN=YOUR_SECRET_TOKEN
|
||||
./yDropbox --workspace ./workspace
|
||||
```
|
||||
|
||||
启动时会自动创建 `workspace/inbox`、`workspace/outbox` 与 `workspace/.ydropbox` 目录。
|
||||
|
||||
### 其他命令
|
||||
|
||||
```bash
|
||||
make test # 运行测试 (go test ./...)
|
||||
make vet # 静态检查 (go vet ./...)
|
||||
make clean # 删除二进制文件
|
||||
```
|
||||
|
||||
## 配置
|
||||
|
||||
| 参数 / 环境变量 | 说明 | 默认值 |
|
||||
| ---------------------- | --------------------------------- | ---------------- |
|
||||
| `--addr` | HTTP 监听地址 | `127.0.0.1:8999` |
|
||||
| `--workspace` | 工作区目录(文件与数据库存放处) | `./workspace` |
|
||||
| `--token` / `YDROPBOX_TOKEN` | 访问令牌(必填,用于登录校验) | 无(必须提供) |
|
||||
|
||||
## 使用
|
||||
|
||||
1. 在浏览器打开 `http://<addr>/`,使用启动时的令牌登录。
|
||||
2. 在 `inbox` / `outbox` 面板中通过按钮或拖拽上传文件。
|
||||
3. 点击下载 / 删除管理文件。
|
||||
4. 点击分享生成链接;可在创建时设置密码与过期时间,链接形如 `/s/<token>`。
|
||||
|
||||
## HTTP API
|
||||
|
||||
所有受保护接口均需在请求中携带登录后获得的 `ydropbox_session` Cookie。
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
| ------ | ------------------------------- | -------------------------------------- |
|
||||
| POST | `/api/login` | 使用令牌登录(`{"token": "..."}`) |
|
||||
| POST | `/api/logout` | 注销当前会话 |
|
||||
| POST | `/api/upload` | 上传文件(`multipart/form-data` 字段 `file`) |
|
||||
| GET | `/api/files?dir=inbox\|outbox` | 列出指定目录下的文件 |
|
||||
| GET | `/api/files/{id}/download` | 下载指定文件 |
|
||||
| DELETE | `/api/files/{id}` | 删除指定文件 |
|
||||
| POST | `/api/files/{id}/share` | 创建分享链接(可选 `password`、`expires_in_hours`) |
|
||||
| GET | `/api/shares` | 列出所有分享链接 |
|
||||
| DELETE | `/api/shares/{id}` | 删除指定分享链接 |
|
||||
| GET | `/s/{token}` | 访问分享链接(受密码保护时显示表单) |
|
||||
| POST | `/s/{token}` | 提交分享链接密码 |
|
||||
|
||||
### 限制说明
|
||||
|
||||
- 单次上传文件大小上限为 **100 MiB**。
|
||||
- 会话有效期为 7 天,登录失败 5 次后锁定 60 秒。
|
||||
- 分享链接过期后再次访问会被自动删除。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
cmd/ydropbox/main.go # 程序入口、命令行参数解析
|
||||
internal/app/ # 应用装配(数据库、扫描器、HTTP 服务)
|
||||
internal/server/ # HTTP 路由、认证、文件与分享处理、中间件
|
||||
internal/store/ # SQLite 存储层(文件与分享元数据)
|
||||
internal/scanner/ # 工作区目录扫描与元数据同步
|
||||
web/ # 前端静态资源(HTML/CSS/JS,Alpine.js)
|
||||
tests/ # 集成测试
|
||||
```
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目仅供学习与自用部署场景,请自行负责数据安全与访问控制。
|
||||
Reference in New Issue
Block a user