MyObj 是一个基于 Go + Vue3 开发的现代化开源私有云存储系统,为个人和家庭用户提供安全、高效、易用的文件管理服务。系统采用前后端分离架构,支持大文件上传、断点续传、秒传、文件分享、权限管理、WebDAV 协议等丰富功能,可作为企业级对象存储服务的轻量化替代方案。
- 🔒 数据安全 - 文件加密存储,完全掌控自己的数据
- ⚡ 高性能 - 基于 Gin 框架和 BLAKE3 哈希算法,性能卓越
- 🎯 功能丰富 - 支持秒传、分片上传、离线下载、种子下载等高级特性
- 🌐 跨平台 - 支持 Web、Android,提供 WebDAV 协议对接第三方客户端
- 🤖 AI 赋能 - 内置 MCP 服务,支持大模型智能文件管理(开发中)
- 🚀 易于部署 - 支持 SQLite/MySQL,单文件部署,开箱即用
🚀 智能上传
|
📥 灵活下载
|
- ✅ 用户存储配额 - 为每个用户设置独立的存储空间限制
- ✅ 细粒度权限控制 - 支持文件级别的访问权限设置
- ✅ 用户组管理 - 基于用户组的权限策略控制
- ✅ API Key 认证 - 支持程序化访问和第三方集成
- ✅ JWT 安全认证 - 基于 Token 的现代化认证机制
- 📁 虚拟目录结构 - 灵活的文件组织方式,不暴露服务端真实目录,多用户互不干扰
- 🏷️ 文件操作 - 重命名、移动、复制、删除(回收站机制)
- 🔍 搜索功能 - 快速搜索文件和文件夹
- 🔗 限时分享链接 - 生成带有效期的文件分享链接,支持密码保护
- 👁️ 文件预览 - 支持图片、视频在线预览
- 🖼️ 自动缩略图 - 为图片和视频自动生成预览缩略图
- 🌐 公开文件广场 - 用户可以将文件设为公开,供其他用户浏览
- 🔒 文件加密存储 - 可选择性加密敏感文件,保护隐私数据
- 🛡️ JWT 认证 - 安全的 Token 认证机制
- 🔑 API Key 管理 - 支持创建和管理多个 API Key
- 🗑️ 回收站机制 - 删除的文件可恢复,防止误操作
- 📊 操作日志 - 完整的文件操作审计日志
- ✅ 标准 WebDAV 协议 - 兼容主流 WebDAV 客户端
- ✅ 文件浏览与下载 - 通过 WebDAV 访问所有文件
- ✅ 目录管理 - 创建、删除、重命名文件夹
- ✅ 权限控制 - 基于用户权限的访问控制
- ✅ 多用户隔离 - 每个用户只能访问自己的文件空间
💡 详细使用指南: WebDAV 配置文档
通过内置的 MCP (Model Context Protocol) 服务,MyObj 支持与大语言模型深度集成:
- 🧠 智能文件归档 - AI 自动识别文件类型并智能分类
- 🔍 AI 检索 - 大模型语义搜索网盘文件
- 💾 内容保存 - AI 生成的内容可直接保存到网盘
- 📄 智能摘要 - 大模型可阅读文件并生成内容摘要
- 🌐 Web 端 - 现代化的响应式网页界面(Vue3 + Element Plus)
- 📱 Android 端 - 原生安卓应用(开发中)
- 💻 WebDAV 客户端 - 支持所有兼容 WebDAV 的第三方应用
| 框架 | Gin 1.11+ (高性能 HTTP Web 框架) |
| ORM | GORM 1.31+ (强大的 Go ORM 库) |
| 数据库 | MySQL 5.7+ / SQLite 3 (双数据库支持) |
| 认证 | JWT (JSON Web Token) + API Key |
| 缓存 | Redis / 本地缓存 (可选) |
| 哈希算法 | BLAKE3 (高性能哈希,支持秒传) |
| 协议 | WebDAV (RFC 4918) |
| BT 下载 | anacrolix/torrent (完整的 BitTorrent 客户端) |
| 文档 | Swagger 2.0 (自动生成 API 文档) |
| 框架 | Vue 3.5+ (Composition API) |
| UI 组件 | Element Plus 2.11+ (现代化组件库) |
| 构建工具 | Vite 7.2+ (极速开发体验) |
| 状态管理 | Pinia 3.0+ (Vue 官方推荐) |
| 路由 | Vue Router 4.6+ |
| 类型支持 | TypeScript 5.9+ |
| 哈希计算 | spark-md5 (文件秒传哈希) |
- 操作系统: Windows 7+, macOS, Linux
- CPU: 2 核或更高
- 内存: 2GB RAM 或更高
- 磁盘: 根据存储需求而定
- Go: 1.25 或更高版本
- Node.js: 18.0 或更高版本
- 数据库: MySQL 5.7+ 或 SQLite 3
-
下载最新版本
从 Releases 页面下载对应平台的二进制文件。
-
解压并配置
# 解压文件 unzip myobj-{version}-{platform}.zip cd myobj # 编辑配置文件 vim config.toml # Linux/Mac notepad config.toml # Windows
-
启动服务
# Linux/Mac ./server # Windows server.exe
-
访问系统
打开浏览器访问:
http://localhost:8080
git clone https://gitee.com/MR-wind/my-obj.git
cd myobj编辑 config.toml 文件,配置数据库、服务器等信息:
[server]
host = "0.0.0.0" # 监听地址(0.0.0.0 允许外部访问)
port = 8080 # 监听端口
ssl = false # 是否启用 SSL
swagger = true # 是否启用 Swagger API 文档
[database]
type = "sqlite" # 数据库类型: mysql 或 sqlite
host = "./libs/my_obj.db" # SQLite 数据库文件路径
# 使用 MySQL 时的配置示例:
# type = "mysql"
# host = "localhost"
# port = 3306
# user = "root"
# password = "your-password"
# db_name = "my_obj"
[auth]
secret = "your-secret-key" # JWT 密钥(请修改为随机字符串)
api_key = true # 是否启用 API Key
jwt_expire = 2 # Token 有效期(小时)
[file]
thumbnail = true # 是否生成缩略图
big_file_threshold = 1 # 大文件分片阈值(GB)
big_chunk_size = 1 # 大文件分片大小(GB)
data_dir = "obj_data" # 文件存储目录
temp_dir = "obj_temp" # 临时文件目录
[webdav]
enable = true # 是否启用 WebDAV 服务
host = "0.0.0.0" # 监听地址
port = 8081 # 监听端口
prefix = "/dav" # 路径前缀
[log]
level = "debug" # 日志级别: debug, info, warn, error
log_path = "./logs/" # 日志路径
max_size = 10 # 日志文件最大大小(MB)
max_age = 7 # 日志保留天数# 编译 CLI 工具
go build -buildvcs=false -o myobj-cli ./src/cmd/cli
# 执行数据库迁移(首次运行时会自动创建表)
# 注意:当前 CLI 工具已重构,数据库初始化会在首次启动时自动完成
# 也可以查看 CLI 工具功能:
./myobj-cli --help
./myobj-cli user list # 查看用户列表
# Windows 用户使用:
go build -buildvcs=false -o myobj-cli.exe .\src\cmd\cli
.\myobj-cli.exe --help💡 提示: CLI 工具现已重构,提供更多管理功能,详见 CLI 工具使用文档。
后端开发:
# 安装依赖
go mod download
# 启动后端服务
go run src/cmd/server/main.go前端开发:
# 进入前端目录
cd webview
# 安装依赖
npm install
# 启动开发服务器
npm run dev前端开发服务器默认运行在 http://localhost:5173,API 请求会自动代理到后端 http://localhost:8080。
使用 builds/ 目录下的跨平台编译脚本:
Windows 平台:
cd builds
windows-build-windows.bat # 编译 Windows 版本
windows-build-linux.bat # 编译 Linux 版本
windows-build-mac.bat # 编译 Mac 版本Linux/Mac 平台:
cd builds
chmod +x *.sh # 添加执行权限
./linux-build-linux.sh # Linux: 编译 Linux 版本
./mac-build-mac.sh # Mac: 编译 Mac 版本编译完成后,所有文件位于 bin/ 目录,可直接部署到目标服务器。
💡 详细构建说明: 编译脚本文档
MyObj 提供了强大的命令行工具用于系统管理。CLI 工具使用 urfave/cli 框架构建,界面美观,功能完善。
# 编译 CLI 工具
go build -buildvcs=false -o myobj-cli ./src/cmd/cli
# Windows 用户
go build -buildvcs=false -o myobj-cli.exe .\src\cmd\cli# 查看全局帮助
./myobj-cli --help
# 查看版本信息
./myobj-cli --version
# 查看特定命令的帮助
./myobj-cli user --help
./myobj-cli group --help
./myobj-cli system --help# 列出所有用户(表格形式展示)
./myobj-cli user list
./myobj-cli user ls # 使用别名
# 查看用户详细信息
./myobj-cli user detail <username>
./myobj-cli user info admin # 示例:查看 admin 用户信息
# 重置用户密码
./myobj-cli user reset-password <username> <new-password>
./myobj-cli user pwd admin 123456 # 示例:重置 admin 密码
# 修改用户组(交互式选择)
./myobj-cli user change-group <username>
./myobj-cli user chgrp admin # 示例:修改 admin 的用户组
# 封禁用户
./myobj-cli user ban <username>
./myobj-cli user ban test # 示例:封禁 test 用户
# 解封用户
./myobj-cli user unban <username>
./myobj-cli user unban test # 示例:解封 test 用户
# 踢出用户所有登录会话
./myobj-cli user kick <username>
./myobj-cli user kick admin # 示例:踢出 admin 的所有登录# 列出所有用户组(包含用户数统计)
./myobj-cli group list
./myobj-cli group ls # 使用别名# 查看系统配置信息
./myobj-cli system info
# 查看系统统计数据(用户数、组数等)
./myobj-cli system stats- ✨ 美观的界面 - 使用 pterm 提供彩色输出和表格展示
- 🎯 交互式操作 - 使用 survey 提供友好的选择界面
- 🔒 安全确认 - 所有危险操作都需要用户确认
- 📖 完整的帮助 - 每个命令都有详细的帮助信息
- ⌨️ 短别名支持 - 命令都有简短的别名(如
user list可以用u ls)
系统内置 Swagger API 文档,启动服务后访问:
http://localhost:8080/swagger/index.html
用户认证:
# 用户登录获取 Token
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"password"}'
# 响应示例
{
"code": 200,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expire": "2024-01-01T12:00:00Z"
}
}文件上传:
# 简单文件上传
curl -X POST http://localhost:8080/api/file/upload \
-H "Authorization: Bearer <your-token>" \
-F "file=@/path/to/file.pdf" \
-F "virtual_path=/"
# 加密文件上传
curl -X POST http://localhost:8080/api/file/upload \
-H "Authorization: Bearer <your-token>" \
-F "file=@/path/to/secret.doc" \
-F "virtual_path=/" \
-F "is_enc=true" \
-F "file_password=mypassword"文件下载:
# 下载文件
curl -X GET http://localhost:8080/api/file/download/:file_id \
-H "Authorization: Bearer <your-token>" \
-o downloaded_file
# 加密文件下载(需要密码)
curl -X GET http://localhost:8080/api/file/download/:file_id?password=mypassword \
-H "Authorization: Bearer <your-token>" \
-o downloaded_file创建分享链接:
curl -X POST http://localhost:8080/api/share/create \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
-d '{
"file_id": "123",
"expire_hours": 24,
"password": "share123"
}'API Key 访问:
# 使用 API Key 访问
curl -X GET http://localhost:8080/api/file/list \
-H "X-API-Key: your-api-key"详细的 WebDAV 配置和使用指南,请参阅:WebDAV 使用文档
myobj/
├── src/ # 后端源代码
│ ├── cmd/ # 程序入口
│ │ ├── server/ # Web 服务器主程序
│ │ │ └── main.go
│ │ └── cli/ # 命令行工具
│ │ └── main.go
│ ├── config/ # 配置管理
│ │ └── config.go # 配置文件加载与解析
│ ├── core/ # 核心业务逻辑
│ │ ├── domain/ # 领域模型
│ │ │ ├── request/ # 请求 DTO
│ │ │ └── response/ # 响应 DTO
│ │ └── service/ # 业务服务层
│ │ ├── file_service.go # 文件管理服务
│ │ ├── user_service.go # 用户管理服务
│ │ ├── shares_service.go # 分享服务
│ │ └── ...
│ ├── internal/ # 内部实现(不对外暴露)
│ │ ├── api/ # API 层
│ │ │ ├── handlers/ # 请求处理器
│ │ │ ├── middleware/ # 中间件(认证、日志、CORS等)
│ │ │ └── routers/ # 路由配置
│ │ └── repository/ # 数据访问层
│ │ ├── database/ # 数据库实现
│ │ │ ├── mysql.go # MySQL 驱动
│ │ │ └── sqlite.go # SQLite 驱动
│ │ └── impl/ # Repository 实现
│ ├── pkg/ # 公开包(可复用组件)
│ │ ├── models/ # 数据模型(对应数据库表)
│ │ ├── auth/ # 认证模块(JWT、API Key)
│ │ ├── cache/ # 缓存模块(Redis、本地缓存)
│ │ ├── download/ # 下载模块(HTTP、Torrent)
│ │ ├── upload/ # 上传模块(分片、秒传)
│ │ ├── hash/ # 哈希计算(BLAKE3)
│ │ ├── preview/ # 文件预览(图片、视频)
│ │ ├── share/ # 分享功能
│ │ ├── task/ # 任务调度
│ │ ├── util/ # 工具函数
│ │ ├── webdav/ # WebDAV 协议实现
│ │ └── logger/ # 日志系统
│ └── tests/ # 测试代码
│ ├── repository_crud_test.go
│ ├── upload_test.go
│ └── ...
│
├── webview/ # 前端源代码(Vue3)
│ ├── src/
│ │ ├── api/ # API 请求封装
│ │ ├── assets/ # 静态资源
│ │ ├── components/ # 公共组件
│ │ ├── composables/ # 组合式函数
│ │ ├── layout/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── types/ # TypeScript 类型定义
│ │ ├── utils/ # 工具函数
│ │ ├── views/ # 页面组件
│ │ ├── App.vue # 根组件
│ │ └── main.ts # 入口文件
│ ├── dist/ # 构建产物
│ ├── package.json
│ ├── vite.config.ts
│ └── tsconfig.json
│
├── builds/ # 跨平台编译脚本
│ ├── windows-build-windows.bat
│ ├── linux-build-linux.sh
│ ├── mac-build-mac.sh
│ └── README.md
│
├── docs/ # 文档
│ ├── WEBDAV_USAGE.md # WebDAV 使用文档
│ ├── swagger.json # Swagger API 定义
│ └── swagger.yaml
│
├── templates/ # HTML 模板
│ ├── share_password.html # 分享密码验证页面
│ └── 404.html
│
├── sql/ # SQL 脚本
│ └── clear_test_data.sql
│
├── config.toml # 主配置文件
├── go.mod # Go 模块定义
├── go.sum # 依赖校验
└── README.md # 项目说明文档
项目包含完善的测试用例,所有测试代码统一存放在 src/tests/ 目录中。
# 运行所有测试
go test ./src/tests/... -v
# 运行指定测试文件
go test ./src/tests/repository_crud_test.go -v
# 运行性能基准测试
go test -bench=. ./src/tests/file_enc_benchmark_test.go
# 查看测试覆盖率
go test -cover ./src/tests/...
# 生成覆盖率报告
go test -coverprofile=coverage.out ./src/tests/...
go tool cover -html=coverage.out| 测试文件 | 说明 |
|---|---|
repository_crud_test.go |
数据库 Repository CRUD 操作测试 |
upload_test.go |
文件上传功能测试 |
instant_upload_test.go |
秒传功能测试 |
blake3_hasher_test.go |
BLAKE3 哈希算法测试 |
file_enc_util_test.go |
文件加密/解密功能测试 |
file_enc_benchmark_test.go |
文件加密性能基准测试 |
rsa_util_test.go |
RSA 加密工具测试 |
utils_test.go |
通用工具函数测试 |
我们欢迎所有形式的贡献!无论是新功能、Bug 修复、文档改进还是问题反馈。
点击项目页面右上角的 Fork 按钮,将项目 Fork 到你的账号下。
git clone https://github.com/your-username/myobj.git
cd myobj# 新功能分支
git checkout -b feature/your-feature-name
# 或者 Bug 修复分支
git checkout -b fix/your-bugfix-name- ✅ 遵循项目的代码规范
- ✅ 添加必要的测试用例
- ✅ 确保所有测试通过
- ✅ 更新相关文档
git add .
git commit -m "feat: 添加某某功能" # 或 "fix: 修复某某问题"git push origin feature/your-feature-name在 GitHub 上打开你的 Fork,点击 "New Pull Request" 按钮:
- 选择 base 分支(通常是
main) - 填写 PR 标题和详细描述
- 说明改动的内容和原因
- 提交 Pull Request
我们使用 约定式提交 (Conventional Commits) 规范:
| 类型 | 说明 | 示例 |
|---|---|---|
feat |
新功能 | feat: 添加文件批量下载功能 |
fix |
Bug 修复 | fix: 修复大文件上传失败的问题 |
docs |
文档更新 | docs: 更新 API 使用文档 |
style |
代码格式调整(不影响功能) | style: 格式化代码缩进 |
refactor |
代码重构(不修改功能) | refactor: 重构文件上传逻辑 |
perf |
性能优化 | perf: 优化哈希计算性能 |
test |
测试相关 | test: 添加文件上传单元测试 |
chore |
构建/工具相关 | chore: 更新依赖版本 |
ci |
CI/CD 相关 | ci: 添加 GitHub Actions 工作流 |
提交信息示例:
feat: 添加文件批量下载功能
- 实现多文件打包下载 API
- 添加打包进度查询接口
- 前端界面支持批量选择下载- ✅ 遵循 Go Code Review Comments
- ✅ 使用
gofmt或goimports格式化代码 - ✅ 所有公开的函数、类型、常量都必须有注释
- ✅ 注释应以函数/类型名称开头,如:
// GetUserByID retrieves a user by their ID - ✅ 内部实现放在
internal/目录,对外接口放在pkg/目录 - ✅ 所有测试代码统一放在
src/tests/目录 - ✅ 错误处理要完善,避免 panic
- ✅ 使用有意义的变量名,避免单字母变量(除循环变量)
- ✅ 遵循 Vue 3 风格指南
- ✅ 使用 Composition API 而非 Options API
- ✅ 组件名称使用 PascalCase
- ✅ 使用 TypeScript 类型注解,避免
any - ✅ 使用 ESLint 和 Prettier 格式化代码
- ✅ 组件应拆分为合理的粒度,避免过大
- 🔍 先查看 Issues,避免重复工作
- 💬 如果是重大更改,建议先开 Issue 讨论设计方案
- 📖 阅读相关代码,理解现有实现
- ✅ 确保所有测试通过 (
go test ./src/tests/...) - ✅ 确保代码已格式化 (
gofmt -w .) - ✅ 更新相关文档(如果有 API 变更)
- ✅ 在 PR 描述中说明改动内容和测试情况
- 📝 功能变更时同步更新 README.md
- 📝 新增 API 时更新 Swagger 注释
- 📝 重大特性需要在
docs/目录添加使用文档
发现 Bug 或有功能建议?请创建 Issue 并提供:
- 📋 问题的详细描述
- 🔄 复现步骤(如果是 Bug)
- ✅ 期望行为
- ❌ 实际行为
- 💻 系统环境信息(操作系统、Go 版本、浏览器等)
- 📄 相关日志或截图
Issue 模板示例:
### 问题描述
简要描述遇到的问题
### 复现步骤
1. 打开文件列表页面
2. 点击上传按钮
3. 选择大于 1GB 的文件
4. 观察上传进度
### 期望行为
文件应该能正常上传并显示进度
### 实际行为
上传到 50% 时报错并中断
### 环境信息
- OS: Windows 11
- Go 版本: 1.25
- 浏览器: Chrome 120
- MyObj 版本: v1.0.0
### 相关日志ERROR: upload failed: connection timeout
如果你在贡献过程中遇到问题:
- 📖 查看项目文档和示例代码
- 🔍 搜索已有的 Issues
- 💬 在 Issue 中提问
- 📧 联系项目维护者
我们正在积极开发以下功能,欢迎贡献:
- 多网盘接入 - 支持阿里云盘、百度网盘、天翼云盘等第三方存储
- 文件类型自动分类 - 智能归类文件(文档、图片、视频等)
- 文本文件在线编辑 - 支持在线预览和编辑文本文件
- 视频封面自动生成 - 视频文件自动截取封面作为缩略图
- 格式转换 - 下载时支持指定格式转换(如 HEIC → JPG)
- 冷数据归档 - 自动归档压缩长期未访问的文件,节省存储空间
- iOS 客户端 - 原生 iOS 应用
- 桌面客户端 - Electron 跨平台桌面应用
- Docker 部署 - 提供官方 Docker 镜像
- K8s 支持 - Helm Charts 和部署文档
- 对象存储扩展 - 支持 S3、MinIO 等对象存储后端
- 文件版本控制 - 类似 Git 的文件版本管理
- 协作功能 - 多人实时协作编辑
- 全文搜索 - 基于 ElasticSearch 的文件内容搜索
以下功能特别欢迎社区贡献:
- 🌐 国际化 (i18n) - 多语言支持
- 🎨 主题系统 - 自定义界面主题
- 📊 统计面板 - 可视化数据统计
- 🔌 插件系统 - 可扩展的插件架构
- 📱 移动端适配优化 - 更好的移动端体验
💡 参与讨论: 查看 待开发功能列表 或在 Discussions 中分享你的想法!
本项目采用 Apache License 2.0 开源,详见 LICENSE 文件。
- ✅ 商业使用 - 可用于商业项目
- ✅ 修改代码 - 可以修改源代码
- ✅ 分发软件 - 可以分发原始或修改后的代码
- ✅ 专利授权 - 提供明确的专利授权
- ✅ 私人使用 - 可以私人使用和修改
- 📄 保留版权声明 - 保留原作者的版权声明
- 📄 声明修改 - 需要在修改的文件中说明修改内容
- 📄 包含许可证 - 分发时需要包含 Apache 2.0 许可证副本
- 📄 保留 NOTICE 文件 - 如果项目包含 NOTICE 文件,需要一并保留
- 🛡️ 专利保护 - 明确授予专利使用权,避免专利诉讼
- 📜 商业友好 - 适合企业使用,无需担心法律风险
- 🌍 国际认可 - 被 Apache 基金会等主流开源组织广泛采用
感谢以下开源项目和技术社区的支持:
- Gin - 高性能 Go Web 框架
- GORM - 优秀的 Go ORM 库
- Vue.js - 渐进式 JavaScript 框架
- Element Plus - 基于 Vue 3 的组件库
- BLAKE3 - 高性能哈希算法
- anacrolix/torrent - Go BitTorrent 库
特别感谢所有为本项目做出贡献的开发者!
- 🏠 项目主页: https://gitee.com/dromara/my-ob
- 🐛 问题反馈: Gitee Issues
- 💬 讨论区: Gitee Discussions
- 🌐 官方网站: https://gitee.com/dromara/my-ob