摘要
EteDrop 是一个跨平台文件传输项目,包含Flutter 客户端、NestJS 信令服务、文件分享页和官网。项目目标是让手机、电脑、桌面端和浏览器之间可以更方便地传输文件,优先使用局域网和 WebRTC/P2P 等直接传输方式,服务端主要负责信令、分享页分发和运行状态接口。
项目已正式开源:
- GitHub:https://github.com/bfzg/etedrop
- 官网:https://etedrop.com
为什么做 EteDrop
日常工作里,文件传输是一个很高频但经常不够顺手的场景:
- 手机传电脑,需要登录同一个账号或借助聊天软件;
- 电脑传电脑,经常要经过网盘或云端中转;
- 大文件传输受限于上传速度、下载速度和容量限制;
- 局域网明明很快,但很多工具没有很好利用;
- 临时发给别人一个文件,希望对方直接用浏览器打开就能接收。
EteDrop 的目标不是再做一个网盘,而是做一个更轻量、更直接的文件传输工具:能走局域网时优先走局域网,能建立 P2P 时尽量让数据直接在设备之间传输,服务端只承担必要的协调工作。
项目能力
当前项目主要包含这些能力:
- 多平台客户端:Android、iOS、macOS、Windows、Linux;
- 局域网设备发现和局域网传输;
- WebRTC/P2P 文件传输;
- 浏览器分享页接收文件;
- 常见文件类型预览;
- 部分媒体播放和转码流程;
- 全球节点和中国大陆节点配置;
- 服务端健康检查、用量统计和 Prometheus 指标接口;
- 官网、下载页和部署文档。
技术架构
项目采用 monorepo 方式组织:
fast_send_workspace/ ├── fast_send_flutter/ # Flutter 客户端 ├── fast_send_server/ # NestJS 信令与 API 服务 ├── share-page-app/ # React/Vite 文件分享页 ├── website/ # Docusaurus 官网 ├── doc/ # 架构、部署、协议、打包文档 └── ffmpeg_build/ # FFmpeg/FFprobe 二进制文件Flutter 客户端
客户端使用 Flutter 实现,覆盖移动端和桌面端。核心关注点包括:
- 跨平台 UI 和本地文件选择;
- 局域网设备发现;
- WebSocket 信令连接;
- WebRTC 数据通道传输;
- 文件接收、下载状态和任务管理;
- 桌面端托盘、通知、自启动等体验。
NestJS 信令服务端
服务端主要负责“协调”,而不是“存储文件”:
/api/connect:设备之间的信令连接;/api/share:浏览器分享页相关连接;/api/system/health:健康检查;/api/system/metrics:Prometheus 指标;- 静态托管分享页资源。
服务端可以部署在 Nginx 后面,由 Nginx 负责 TLS 终止和域名转发。
文件分享页
分享页是一个独立的 React/Vite 项目。用户打开分享链接后,可以直接在浏览器里查看分享信息、预览部分文件并下载。
这个设计的好处是:接收方不一定需要安装客户端,只要有浏览器,就可以参与一次临时文件接收。
WebRTC/P2P
EteDrop 尽量避免所有文件都经过服务端中转。服务端主要用于交换连接信息,真正的数据传输优先发生在设备之间。
这样做的优势是:
- 降低服务端带宽压力;
- 在局域网或网络条件较好时传输更快;
- 文件数据不必默认进入中心化存储。
开源前做了哪些处理
这次开源前,项目补充了:
- 根目录
README.md和中文 README; - MIT License;
CONTRIBUTING.md;SECURITY.md;THIRD_PARTY_NOTICES.md;- Android 签名配置模板;
- 根目录
.gitignore; - Git 历史中的本地工作目录、系统文件和签名密钥清理。
其中 FFmpeg 二进制相关内容单独写在第三方声明中。FFmpeg 的许可证义务取决于构建参数和启用组件,发布二进制安装包前需要重新核对。
快速体验
克隆项目:
gitclone https://github.com/bfzg/etedrop.gitcdfast_send_workspace启动服务端:
cdfast_send_servernpmcinpmrun start:dev启动 Flutter 客户端:
cdfast_send_flutter flutter pub get flutter run-dmacos启动分享页:
cdshare-page-appnpmcinpmrun tailwindnpmrun dev更多命令可以查看仓库 README 和doc/目录。
适合谁关注
如果你对下面这些方向感兴趣,可以看看这个项目:
- Flutter 跨平台客户端开发;
- WebRTC DataChannel 文件传输;
- 局域网发现和设备互联;
- NestJS WebSocket 服务;
- 文件分享页和浏览器接收体验;
- 一个真实跨端产品从客户端、服务端到官网的工程组织方式。
后续计划
后续会继续围绕这些方向优化:
- 跨平台传输稳定性;
- 大文件传输体验;
- 分享页兼容性;
- 部署和打包流程;
- 文档和开源协作流程;
- 更多平台能力补齐。
项目地址
- GitHub:https://github.com/bfzg/etedrop
- 官网:https://etedrop.com
如果你觉得项目有帮助,欢迎 Star、Issue 或参与贡献。