一、概述
FileBridge 是一个基于 Web 的企业级文件共享平台,用现代化的 Vue 3 中文界面替代传统 FTP,面向需要与外部客户安全交换文件的中小企业。
产品形态为前后端分离的 Web 应用(Go + Vue 3 + PostgreSQL),支持 Docker 一键部署。系统设有三种用户角色:超级管理员(IT/运维)、项目管理员(业务人员)、客户(外部合作方),每种角色有专属界面和权限体系。
核心功能包括:
-
项目制数据隔离 — 不同项目文件完全隔离,同项目内成员共享
-
大文件分片断点续传 — 自动切分 5MB 分片,最大支持 2GB+ 文件,网络中断只需续传未完成部分
-
客户上传审批工作流 — 客户上传的文件需管理员审批后才对项目其他成员可见
-
签名下载链接 — 下载 URL 带 HMAC 时效签名,防止直链盗用
-
全链路操作审计 — 登录/上传/下载/删除/审批等所有敏感操作均有日志记录
-
文件过期自动清理 — 到期前 3 天通知,到期后自动隐藏
-
SFTP 协议支持 — 客户也可使用 FileZilla、WinSCP 等 SFTP 客户端连接
技术栈:后端 Go 1.22 + Gin 框架 + JWT 双 Token 认证 + bcrypt 加密 + Redis 限流;前端 Vue 3 + TypeScript + Arco Design Vue + Pinia 状态管理 + Vite 构建;数据库 PostgreSQL 16 + Redis 7;Nginx 反向代理 + Docker Compose 编排。
二、构思
灵感来源:在实际工作中,大量企业仍在使用 90 年代的 FTP 工具处理今天的企业级文件协作。设计稿传不上去、合同文件不知道被谁下载了、项目结束后文件无人清理——这些痛点在广告、建筑、法律、制造等需要频繁与外部合作方交换文件的行业尤其突出。我希望用现代 Web 技术和 AI 辅助开发,做一个"开箱即用、安全可控"的 FTP 替代品。
想解决的核心痛点:
-
权限粗放 — 传统 FTP 只有目录级权限,无法按项目隔离数据,客户 A 可能看到客户 B 的机密文件。FileBridge 采用项目制 + 文件级三级权限模型(项目权限 → 文件级权限覆盖 → 角色权限),从根源上解决数据泄露风险。
-
无审计追溯 — FTP 没有操作日志,出了安全事件无法定位责任人。FileBridge 记录所有敏感操作(含操作人、IP、时间戳),满足等保、ISO 27001 等合规审计要求。
-
大文件传输易中断 — FTP 不支持断点续传,几百 MB 的文件网络稍有波动就前功尽弃。FileBridge 前端自动将大文件切分为 5MB 分片逐个上传,后端通过 JSONB 记录已上传分片列表,合并时按序校验,真正实现断点续传。
-
无审批流程 — 客户上传的文件未经审核就对所有人可见,质量失控。FileBridge 实现了完整的审批工作流:客户上传 → 状态 pending → 管理员审批/驳回(附理由)→ 站内通知实时告知上传者。
-
文件生命周期不可控 — 项目结束后文件残留,浪费存储也增加泄露风险。FileBridge 支持设置文件有效期,到期前 3 天自动发送提醒通知,到期后自动隐藏并清理磁盘空间。
方向选择:不做网盘(面向 C 端、功能臃肿),也不做 FTP 的简单改良,而是做一个"以项目为核心单元、以安全审计为底线"的 B2B 文件协作平台。
三、体验途径
请上传附件 HTML 文件(FileBridge-Demo.html),在浏览器中打开即可体验完整的交互流程:
-
登录页 — 深蓝渐变背景 + 毛玻璃卡片效果,预填演示账号(admin / admin123),点击登录即可进入
-
客户端 — 浏览 6 个项目卡片(智慧城市、审计报告、供应商规格书等真实业务场景)→ 进入项目查看文件列表(含待审批/已通过/已驳回状态标签)→ 模拟分片上传文件(含进度条动画)→ 生成签名下载链接 → 查看通知中心
-
管理后台 — 仪表盘数据概览(用户/项目/文件/存储统计 + 待审批提醒)→ 用户管理(三种角色 + 状态管理)→ 审批管理(可通过/驳回并填写理由)→ 审计日志(含操作类型筛选 + IP 记录)→ 系统设置(站点配置 + 文件限制 + SFTP 开关)
四、研发历程
本项目使用 TRAE AI 辅助开发,以下是关键开发步骤:
Step 1:需求梳理与架构设计
通过与 TRAE 对话,完成了从痛点分析到技术选型的完整架构设计。Prompt 关键词:「帮我设计一个替代传统 FTP 的企业级 Web 文件共享平台,需要项目隔离、审批流程、审计日志、大文件分片上传」。TRAE 输出了完整的技术选型方案(Go + Gin + Vue 3 + Arco Design + PostgreSQL),并给出了前后端分离的架构图和数据库 ER 设计。
Step 2:后端核心模块开发
分模块逐步实现后端代码:
-
认证模块(auth_service.go)— JWT 双 Token(Access 15分钟 + Refresh 7天)+ bcrypt 密码加密 + Redis 登录限流(5次失败锁15分钟)
-
项目管理(project_handler.go + project_repository.go)— 项目 CRUD + 成员权限管理 + 存储配额
-
文件管理(file_service.go,500+ 行)— 普通上传 + 分片上传(chunk_upload_repository.go 用 JSONB 记录分片状态)+ 签名下载(HMAC-SHA256)+ 批量 ZIP 打包
-
审批流程 — 客户上传文件状态 pending → 管理员 approve/reject → 通知上传者
-
审计日志(audit_logs 表)— 全操作记录,含 user_id、action、resource_type、ip、detail
-
文件过期(expiry_service.go)— 定时任务检查即将到期文件,发送通知,到期后自动清理
-
SFTP 服务(sftp_service.go)— 基于 pkg/sftp 库,自动生成 RSA 主机密钥,目录自动隔离为授权项目
Step 3:前端界面开发
使用 Vue 3 + Arco Design Vue 构建双端界面:
-
客户端(ClientLayout.vue)— 顶部导航 + 项目卡片列表(ProjectsView.vue)+ 文件浏览器(FilesView.vue,19KB,含分片上传组件)+ 通知中心
-
管理后台(AdminLayout.vue,深色侧边栏)— 仪表盘(DashboardView.vue,统计卡片 + 存储用量图表 + 操作时间线)+ 用户管理 + 项目文件管理(ProjectFilesView.vue,30KB,主从布局)+ 审批管理 + 审计日志 + 系统设置
Step 4:Docker 部署与联调
编写 Docker Compose 编排文件(docker-compose.yml),包含 PostgreSQL 16 + Redis 7 + Go 后端 + Nginx 前端四个容器,实现一键部署。后端容器同时暴露 HTTP 8080 和 SFTP 2222 端口。TRAE 帮助排查了容器间网络配置和数据库健康检查依赖等问题。
开发过程中的调试经验:
-
分片上传的断点续传逻辑调试了较长时间——关键是后端 chunk_uploads 表用 JSONB 记录已上传分片列表,前端分片上传完成后调用 /chunks/complete 接口合并,合并时按序校验每个分片是否存在
-
签名下载链接的 HMAC-SHA256 生成需要前后端完全一致的时间戳格式和参数排序,否则签名校验失败导致下载 403
-
Arco Design 的文件上传组件默认不分片,需要自定义 beforeUpload 钩子拦截大文件(>50MB)走分片上传逻辑
-
文件过期定时任务(expiry_service.go)使用了 Go 的 time.Ticker,每隔 1 小时扫描一次,需要提前 3 天查找即将到期的文件并批量发送通知
项目代码结构:
FTP/
├── backend/ # Go 后端
│ ├── cmd/server/main.go # 主入口 + 数据库迁移
│ ├── internal/handler/ # HTTP 路由处理器(7个模块)
│ ├── internal/service/ # 业务逻辑层(8个服务)
│ ├── internal/repository/ # 数据访问层(6个仓库)
│ └── internal/middleware/ # JWT认证 + CORS中间件
├── frontend/ # Vue 3 前端
│ └── src/views/ # 页面视图(客户端5页 + 管理后台8页)
├── deploy/ # Docker Compose + Nginx配置
└── docs/ # PRD + 部署文档
FileBridge-Demo.zip (12.3 KB)这个是项目的demo 请下载打开 .2948212639142715:e742755f57965d7074f9b738a5bbae67_69eeda5741380d69f0b4282d.69eedcc641380d69f0b428ce.69eedcc506fbfa62bdfea320:Trae CN.T(2026/4/27 11:49:26).2948212639142715:9368642817855bfd150c76492ac14d8e_69ef8489378a68bb11acca48.69f0d814378a68bb11acce70.69f0d814c1307377ffec2bbc:Trae CN.T(2026/4/28 23:53:56).2948212639142715:0e254174a0db23c5811f4d1f09080718_69ef8489378a68bb11acca48.69f0c56c378a68bb11accbb6.69f0c56cc1307377ffec2bb7:Trae CN.T(2026/4/28 22:34:20)




