# IMTools **Repository Path**: link-bin/imtools ## Basic Information - **Project Name**: IMTools - **Description**: 类似飞书(主要是文件传输功能)的IM软件 - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-24 - **Last Updated**: 2025-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文件同步器 - 企业级文件传输与协作系统 ## 📖 项目简介 文件同步器是一个基于 Electron + Node.js + Vue 3 的企业级文件传输与协作系统,支持多客户端实时同步、远程传输、文件管理等功能。系统包含客户端应用、服务端 API 和 Web 管理后台三个部分。 ### 核心特性 - 🚀 **高效传输**:支持断点续传、分片上传、批量传输 - 🔄 **实时同步**:WebSocket 实时通信,多端数据同步 - 👥 **多用户管理**:用户权限控制、客户端管理、在线状态监控 - 📊 **数据可视化**:实时监控面板、传输统计、流量分析 - 🎯 **远程控制**:服务端下发任务、远程文件传输 - 🔐 **安全可靠**:JWT 认证、文件 MD5 校验、秒传功能 - 💼 **协作功能**:项目管理、软件列表、通知推送 --- ## 🛠 技术栈 ### 客户端(Client) - **Electron 33.0.2** - 跨平台桌面应用框架 - **Node.js** - JavaScript 运行时 - **原生 HTML/CSS/JavaScript** - 渲染界面 - **Socket.IO Client** - 实时通信 - **Axios** - HTTP 请求 ### 服务端(Server) - **Node.js + Express** - Web 服务框架 - **MySQL 2** - 关系型数据库 - **Socket.IO** - WebSocket 实时通信 - **JWT** - 身份认证 - **Winston** - 日志系统 - **Multer** - 文件上传处理 - **Archiver** - 文件压缩 ### Web 管理后台(Web) - **Vue 3.5** - 渐进式前端框架 - **Vite 6.0** - 现代化构建工具 - **Element Plus** - UI 组件库 - **Vue Router 4** - 路由管理 - **Pinia** - 状态管理 - **ECharts 5** - 数据可视化 - **Axios** - HTTP 客户端 --- ## 📁 项目结构 ``` 文件同步器-项目/ ├── client/ # Electron 客户端 │ ├── src/ │ │ ├── main/ # 主进程 │ │ │ ├── main.js # 入口文件 │ │ │ ├── ipcHandlers.js # IPC 通信处理 │ │ │ └── utils/ # 工具函数 │ │ ├── renderer/ # 渲染进程 │ │ │ ├── pages/ # 页面文件 │ │ │ ├── styles/ # 样式文件 │ │ │ ├── utils/ # 工具函数 │ │ │ └── assets/ # 静态资源 │ │ └── preload/ # 预加载脚本 │ ├── package.json │ └── forge.config.js # Electron Forge 配置 │ ├── server/ # Node.js 服务端 │ ├── src/ │ │ ├── config/ # 配置文件 │ │ │ ├── database.js # 数据库配置 │ │ │ └── logger.js # 日志配置 │ │ ├── controllers/ # 控制器 │ │ │ ├── authController.js │ │ │ ├── fileController.js │ │ │ ├── userController.js │ │ │ └── statsController.js │ │ ├── middleware/ # 中间件 │ │ │ └── auth.js # 认证中间件 │ │ ├── routes/ # 路由 │ │ │ ├── auth.js │ │ │ ├── files.js │ │ │ ├── users.js │ │ │ └── stats.js │ │ ├── socket/ # WebSocket │ │ │ └── socketManager.js │ │ └── server.js # 服务入口 │ ├── uploads/ # 文件上传目录 │ ├── logs/ # 日志目录 │ ├── package.json │ └── .env # 环境变量 │ └── server/web/ # Vue 3 管理后台 ├── src/ │ ├── api/ # API 接口 │ ├── assets/ # 静态资源 │ ├── components/ # 组件 │ ├── store/ # Pinia 状态管理 │ ├── views/ # 页面视图 │ │ ├── Dashboard.vue # 数据大屏 │ │ ├── Files.vue # 文件管理 │ │ ├── Users.vue # 用户管理 │ │ ├── Clients.vue # 客户端监控 │ │ └── Transfer.vue # 传输队列 │ ├── router/ # 路由配置 │ ├── App.vue │ └── main.js ├── public/ ├── package.json └── vite.config.js ``` --- ## 🚀 快速开始 ### 环境要求 - **Node.js**: >= 18.0.0 - **MySQL**: >= 8.0 - **操作系统**: Windows 10+、macOS 10.15+、Linux ### 1. 数据库准备 #### 创建数据库 ```bash mysql -u root -p ``` ```sql CREATE DATABASE file_sync CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 导入数据库结构 ```bash cd server mysql -u root -p file_sync < database.sql ``` 或手动创建表结构(参考 `server/database.sql`)。 --- ### 2. 服务端部署 #### 安装依赖 ```bash cd server npm install ``` #### 配置环境变量 创建 `.env` 文件: ```env # 服务器配置 PORT=3000 NODE_ENV=production # 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASSWORD=your_password DB_NAME=file_sync # JWT 密钥 JWT_SECRET=your_super_secret_key_change_this_in_production # 文件上传目录 UPLOAD_DIR=./uploads # 日志级别 LOG_LEVEL=info ``` #### 创建上传目录 ```bash mkdir -p uploads logs chmod 755 uploads logs ``` #### 启动服务 ```bash # 开发环境 npm run dev # 生产环境 npm start ``` 服务将在 `http://localhost:3000` 启动。 #### 使用 PM2 部署(推荐) ```bash # 安装 PM2 npm install -g pm2 # 启动服务 pm2 start src/server.js --name file-sync-server # 查看日志 pm2 logs file-sync-server # 设置开机自启 pm2 startup pm2 save ``` --- ### 3. Web 简单部署 #### 安装依赖 ```bash cd server/web npm install ``` #### 配置环境变量 创建 `.env` 文件: ```env # API 地址(开发环境) VITE_API_BASE_URL=http://localhost:3000 # 生产环境可以留空,使用相对路径 # VITE_API_BASE_URL= ``` #### 开发环境运行 ```bash npm run dev ``` 访问 `http://localhost:5173` #### 生产环境构建 ```bash npm run build ``` 生成的文件在 `dist/` 目录。 #### 部署到 Nginx ```bash # 复制构建文件 sudo cp -r dist/* /var/www/file-sync-admin/ # Nginx 配置示例 sudo nano /etc/nginx/sites-available/file-sync-admin ``` ```nginx server { listen 80; server_name admin.yourdomain.com; root /var/www/file-sync-admin; index index.html; # SPA 路由支持 location / { try_files $uri $uri/ /index.html; } # API 代理 location /api/ { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # WebSocket 支持 location /socket.io/ { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` ```bash # 启用配置 sudo ln -s /etc/nginx/sites-available/file-sync-admin /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` --- ### 4. 客户端部署 #### 安装依赖 ```bash cd client npm install ``` #### 配置服务器地址 编辑 `src/renderer/utils/common.js`: ```javascript // 修改服务器地址 const SERVER_HOST = 'your-server.com'; // 你的服务器域名或 IP const SERVER_PORT = '3000'; const SERVER_PROTOCOL = 'http'; // 或 'https' ``` #### 开发环境运行 ```bash npm start ``` #### 打包应用 ```bash # Windows npm run make # macOS npm run make # Linux npm run make ``` 打包后的文件在 `out/` 目录: - **Windows**: `.exe` 安装包 - **macOS**: `.dmg` 或 `.app` - **Linux**: `.deb` / `.rpm` / `.AppImage` #### 分发客户端 1. 将打包好的安装包分发给用户 2. 用户安装后首次启动会要求登录 3. 使用管理后台创建的用户账号登录 --- ## 🔧 配置说明 ### 服务端配置 #### 数据库连接池 编辑 `server/src/config/database.js`: ```javascript const pool = mysql.createPool({ host: process.env.DB_HOST || 'localhost', user: process.env.DB_USER || 'root', password: process.env.DB_PASSWORD, database: process.env.DB_NAME || 'file_sync', port: process.env.DB_PORT || 3306, waitForConnections: true, connectionLimit: 10, // 连接池大小 queueLimit: 0 }); ``` #### 文件上传限制 编辑 `server/src/server.js`: ```javascript app.use(express.json({ limit: '100mb' })); app.use(express.urlencoded({ extended: true, limit: '100mb' })); ``` #### CORS 配置 ```javascript app.use(cors({ origin: ['http://localhost:5173', 'https://your-domain.com'], credentials: true })); ``` ### 客户端配置 #### 自动更新配置 编辑 `client/forge.config.js` 添加自动更新源。 #### 应用图标 替换以下文件: - `client/src/renderer/assets/logo.png` - 应用图标 - `client/build/icon.ico` (Windows) - `client/build/icon.icns` (macOS) --- ## 📚 使用指南 ### 管理员操作 1. **首次登录** - 访问 Web 管理后台 - 使用默认管理员账号登录(需在数据库中预先创建) 2. **创建用户** - 进入「用户管理」页面 - 点击「新建用户」 - 填写用户名、邮箱、密码 - 分配客户端 ID(可选,留空自动生成) 3. **监控客户端** - 进入「客户端管理」页面 - 查看所有客户端的在线状态、硬件信息 - 查看 CPU、内存、磁盘使用率 4. **文件管理** - 进入「文件管理」页面 - 支持上传、下载、删除、重命名等操作 - 支持文件夹操作和批量下载 5. **传输监控** - 进入「传输队列」页面 - 查看所有传输任务的实时进度 - 支持暂停、继续、取消任务 6. **发送通知** - 进入「通知管理」页面 - 创建通知并选择目标用户或全体用户 - 通知会实时推送到客户端 ### 客户端用户操作 1. **登录** - 启动客户端应用 - 输入管理员分配的账号密码 - 首次登录会绑定客户端 ID 2. **文件浏览** - 在工作台查看文件列表 - 支持文件夹导航 - 双击文件可预览或下载 3. **上传文件** - 点击「上传文件」按钮 - 选择本地文件 - 查看上传进度 4. **接收通知** - 客户端会实时接收服务端推送的通知 - 通知显示在界面右上角 --- ## 🔒 安全建议 1. **修改默认配置** - 更改 JWT_SECRET 为强密码 - 修改数据库默认密码 2. **使用 HTTPS** - 生产环境启用 SSL 证书 - 使用 Nginx 反向代理并配置 HTTPS 3. **防火墙设置** - 仅开放必要端口(3000, 80, 443) - 限制数据库端口(3306)仅本地访问 4. **定期备份** - 定期备份数据库 - 备份 uploads 目录 5. **日志监控** - 定期检查 logs 目录 - 使用 PM2 监控服务状态 --- ## 🐛 故障排除 ### 服务端无法启动 1. 检查端口是否被占用: ```bash lsof -i :3000 ``` 2. 检查数据库连接: ```bash mysql -h localhost -u root -p ``` 3. 查看日志: ```bash tail -f logs/error.log ``` ### 客户端无法连接 1. 检查服务器地址配置是否正确 2. 确认服务端正常运行 3. 检查防火墙设置 4. 查看浏览器控制台错误信息 ### 文件上传失败 1. 检查 uploads 目录权限: ```bash chmod 755 uploads ``` 2. 检查磁盘空间: ```bash df -h ``` 3. 检查文件大小限制配置 --- ## 📝 API 文档 ### 认证接口 #### 用户登录 ``` POST /api/auth/login Content-Type: application/json { "username": "user", "password": "password" } ``` ### 文件接口 #### 获取文件列表 ``` GET /api/files?parentId=0&page=1&limit=20 Authorization: Bearer ``` #### 上传文件 ``` POST /api/upload Authorization: Bearer Content-Type: multipart/form-data file: parentId: 0 ``` #### 下载文件 ``` GET /api/files/download/:id Authorization: Bearer ``` 更多 API 详见代码注释。 --- ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 提交 Pull Request --- ## 📄 开源协议 本项目采用 MIT 协议开源。 --- ## 👨‍💻 作者 **KB** --- ## 🙏 致谢 感谢以下开源项目: - [Electron](https://www.electronjs.org/) - [Vue.js](https://vuejs.org/) - [Element Plus](https://element-plus.org/) - [Express](https://expressjs.com/) - [Socket.IO](https://socket.io/) --- ## 📮 联系方式 如有问题或建议,请通过以下方式联系: - 提交 Issue --- **Copyright © 2021–2025 YKB. All Rights Reserved**