Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

U盘文件复制器

.NET Framework 4.7.2 .NET 8 License

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 启动时自动运行

服务端 API

方法 端点 说明
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 天后被后台服务自动清除,也可通过"清空回收站"手动清理。

Web 管理面板

直接访问 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 生成), 不要使用仓库中示例或历史提交中的默认值。

客户端

  1. 用 Visual Studio 打开 U盘文件复制.sln
  2. 生成 Client/U盘文件复制.csproj(.NET Framework 4.7.2)
  3. 运行 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(无框架依赖)
存储 本地文件系统(客户端 + 服务端)

更新历史

v1.5.0(2026-08-02)

  • SQLite 文件索引:搜索从全盘扫描升级为索引查询,大量文件下性能显著提升
  • 回收站:删除改为软删除(移入 .trash 可恢复),新增回收站列表/恢复/清空 API 与 Web 页面
  • 批量打包下载:Web 面板多选文件打包为 ZIP 下载
  • 访问审计日志:记录每次 API 访问(认证方式/令牌脱敏/IP/请求),默认 Storage/audit.log
  • 自动更新检查:客户端启动时检查 GitHub Releases,有新版托盘提示(可开关)
  • 修复严重安全漏洞:API 认证中间件路径判断失效导致请求可绕过认证,现已修复并验证
  • 修复:存储统计误将索引数据库计入文件数

v1.4.1(2026-08-02)

  • 修复:服务器配置页"测试连接"按钮与"浏览远程"/连接状态标签重叠
  • 架构:界面层(Forms/)与后端层(Core/)彻底分离,业务代码零 UI 依赖
  • 安全:移除默认弱令牌,前端强制手动输入令牌
  • 修复:本地模式远程浏览下载路径错误、Basic 认证不可用、分块开关保存失效等 6 个问题

v1.4.0(2026-08-02)

  • 控件语义化重命名(textBox1~27 → txt/chk/rdo/btn 可读命名)
  • 客户端按 Forms/ Storage/ 分层重组
  • 清理死代码、AI 占位注释、误标 auto-generated 等屎山

许可证

MIT License


最后更新:2026年8月 版本:V1.5.0

About

U盘文件复制器,启动时自动检测当前计算机是否有U盘插入,如果有,将U盘中的文件静默复制到本地,可以选择文件复制类型。

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages