U盘文件自动备份工具,支持本地存储和远程服务器双模式,配备 Web 管理面板和远程目录浏览功能。
├── Client/ # 客户端 (Windows Forms)
│ ├── Forms/ # 界面层:窗体、控件读写、事件绑定
│ │ ├── Form1.cs # 主窗体(事件编排,调用后端类)
│ │ ├── Form1.Designer.cs # 控件声明与布局(设计器文件)
│ │ ├── Form1.*.cs # 界面部分类(设置绑定/扩展名选择/控件事件)
│ │ ├── RemoteBrowserForm.cs # 远程目录浏览窗口
│ │ └── Program.cs # 入口
│ ├── Core/ # 后端层:纯功能代码(零 UI 依赖)
│ │ ├── CopyEngine.cs # 复制引擎(递归复制/限速/目录树/过滤)
│ │ ├── CopyOptions.cs # 复制任务配置模型
│ │ ├── UsbMonitor.cs # USB 插入监听(WMI)
│ │ ├── LogEngine.cs # 日志引擎(过滤/写文件,事件通知界面)
│ │ ├── SettingsStore.cs # 设置持久化(XML + DPAPI 加密)
│ │ ├── FileCategories.cs # 扩展名分类/系统目录/枚举
│ │ ├── KeyboardHook.cs # 全局键盘钩子(U+S+B / ESC×5)
│ │ ├── AutoStartManager.cs # 开机自启动(注册表)
│ ├── Storage/ # 存储目标层
│ │ ├── IFileDestination.cs # 存储目标接口
│ │ ├── LocalFileDestination.cs # 本地文件系统实现
│ │ ├── HttpFileDestination.cs # HTTP 服务器上传实现
│ │ ├── NetworkHelper.cs # HTTP 请求辅助类
│ │ └── ServerConfig.cs # 服务器配置
│ └── U盘文件复制.csproj # 客户端项目文件
│
├── Server/ # 服务端 (ASP.NET Core Web API)
│ ├── Program.cs # 入口 + 中间件管道
│ ├── Controllers/ # API 控制器
│ │ ├── FileController.cs # 文件操作 API
│ │ └── HealthController.cs # 健康检查
│ ├── Middleware/ # 中间件
│ │ ├── ApiKeyAuthMiddleware.cs # Bearer Token / Basic 认证
│ │ └── RequestLoggingMiddleware.cs
│ ├── Services/ # 服务层
│ │ ├── IFileStore.cs # 文件存储接口
│ │ └── LocalFileStore.cs # 本地文件系统实现
│ ├── wwwroot/ # Web 管理面板
│ │ ├── index.html
│ │ ├── css/style.css
│ │ └── js/app.js
│ └── appsettings.json # 配置文件(令牌、存储路径)
│
├── U盘文件复制.sln # 解决方案文件
└── README.md
| 功能 | 说明 |
|---|---|
| USB 自动检测 | WMI 实时监控 U 盘插入,自动触发复制 |
| 文件类型过滤 | 支持 PPT/文档/表格/PDF/图片/视频/音频/压缩包/自定义扩展名 |
| 重复文件处理 | 跳过 / 覆盖 / 都保留 / 以新换旧 四种策略 |
| 文件大小限制 | 按 MB 限制单个文件大小 |
| 关键词过滤 | 文件名包含指定关键词才复制 |
| 速度控制 | 前 N 分钟限制复制速度(1-10 MB/s) |
| 反向复制 | U 盘根目录创建 copy.stop 触发反向恢复 |
| 本地/远程双模式 | 支持保存到本地目录或上传到远程服务器 |
| 远程目录浏览 | 查看/搜索/下载/删除服务器上的文件 |
| 键盘快捷键 | U→S→B 显示窗口,ESC×5 快速退出 |
| 开机自启动 | 支持 Windows 启动时自动运行 |
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /api/health |
健康检查(免认证) |
| PUT | /api/file/file?path= |
上传文件 |
| HEAD | /api/file/file?path= |
检查文件是否存在 |
| GET | /api/file/list?path=&recursive=&page=&pageSize= |
文件列表(分页) |
| GET | /api/file/download?path= |
下载文件(支持 Range) |
| DELETE | /api/file/file?path= |
删除文件 |
| GET | /api/file/search?keyword=&extension=&startDate=&endDate= |
文件搜索 |
| GET | /api/file/stats |
存储统计 |
| PUT | /api/file/chunk?path=&index=&total= |
上传分块 |
| GET | /api/file/chunk-status?path= |
分块状态查询 |
| POST | /api/file/merge?path=&total= |
合并分块 |
| POST | /api/file/cleanup?hoursOld= |
清理过期分块 |
| POST | /api/file/download-zip |
批量打包下载(body: {"paths":[...]}) |
| GET | /api/file/trash |
列出回收站(软删除) |
| POST | /api/file/restore?path= |
从回收站恢复文件 |
| POST | /api/file/trash-clear?hoursOld= |
清空回收站(可选保留时长) |
注意:
DELETE /api/file/file为软删除(文件移入.trash/回收站,可恢复); 回收站内文件会在 30 天后被后台服务自动清除,也可通过"清空回收站"手动清理。
直接访问 http://localhost:5000 即可使用:
- 文件浏览:目录导航、递归模式、分页浏览、多选打包下载
- 文件上传:拖拽上传、分块上传(断点续传)
- 文件搜索:关键词、扩展名、日期范围过滤
- 回收站:软删除文件恢复、彻底删除、清空回收站
- 存储统计:文件数、空间使用率、未完成分块
- 文件预览:文本/图片在线预览,其他类型下载
- 维护工具:清理过期分块
- 令牌管理:localStorage 持久化
cd Server
dotnet run
# 服务启动在 http://localhost:5000配置 appsettings.json:
{
"FileStorage": {
"RootPath": "Storage",
"TempChunkFolder": "_chunks",
"MaxFileSizeBytes": 1073741824,
"AllowedTokens": ["请替换为随机生成的 API 令牌"],
"BasicPasswords": ["请替换为基本认证密码(可选,与令牌二选一)"]
},
"Cors": {
"AllowedOrigins": ["*"]
}
}安全提醒:
AllowedTokens中的令牌即客户端/Web 面板的访问凭证, 部署前请务必替换为随机值(可用openssl rand -hex 24生成), 不要使用仓库中示例或历史提交中的默认值。
- 用 Visual Studio 打开
U盘文件复制.sln - 生成
Client/U盘文件复制.csproj(.NET Framework 4.7.2) - 运行
Client/bin/Debug/U盘文件复制器.exe
在界面右侧切换到「服务器」模式,填写:
- 服务器地址:
localhost(本机)或服务器 IP - 端口:
5000 - API 令牌:与服务器
AllowedTokens一致 - 取消勾选 HTTPS(服务端默认仅监听 HTTP)
点击「测试连接」验证,通过后即可使用。
| 层级 | 技术 |
|---|---|
| 客户端 | .NET Framework 4.7.2 / Windows Forms / Newtonsoft.Json |
| 服务端 | .NET 8 / ASP.NET Core / Swagger / Bearer Token + Basic 双认证 |
| Web 前端 | 原生 HTML/CSS/JS(无框架依赖) |
| 存储 | 本地文件系统(客户端 + 服务端) |
- SQLite 文件索引:搜索从全盘扫描升级为索引查询,大量文件下性能显著提升
- 回收站:删除改为软删除(移入 .trash 可恢复),新增回收站列表/恢复/清空 API 与 Web 页面
- 批量打包下载:Web 面板多选文件打包为 ZIP 下载
- 访问审计日志:记录每次 API 访问(认证方式/令牌脱敏/IP/请求),默认 Storage/audit.log
- 自动更新检查:客户端启动时检查 GitHub Releases,有新版托盘提示(可开关)
- 修复严重安全漏洞:API 认证中间件路径判断失效导致请求可绕过认证,现已修复并验证
- 修复:存储统计误将索引数据库计入文件数
- 修复:服务器配置页"测试连接"按钮与"浏览远程"/连接状态标签重叠
- 架构:界面层(Forms/)与后端层(Core/)彻底分离,业务代码零 UI 依赖
- 安全:移除默认弱令牌,前端强制手动输入令牌
- 修复:本地模式远程浏览下载路径错误、Basic 认证不可用、分块开关保存失效等 6 个问题
- 控件语义化重命名(textBox1~27 → txt/chk/rdo/btn 可读命名)
- 客户端按 Forms/ Storage/ 分层重组
- 清理死代码、AI 占位注释、误标 auto-generated 等屎山
MIT License
最后更新:2026年8月 版本:V1.5.0