千盈传送:一个浏览器就能传文件,P2P 直连,文件不经过服务器
GitHub 项目地址:https://github.com/Contribuv/fn_qycs (请右键 新窗口打开)
适用平台:飞牛 NAS(fnOS)| 协议:MIT License
🤔 为什么我要做这个东西?
相信你一定遇到过这些场景:
- 微信传文件,超过 100MB 直接拒绝,压缩包还被改后缀名
- AirDrop 只有苹果设备能用,安卓和 PC 只能干瞪眼
- U 盘 翻遍抽屉找不到,找到了还怕中病毒
- 网盘 上传慢、下载限速,传个 1GB 文件等到天荒地老
- 飞书/钉钉 传文件要先上传云端,NAS 带宽全被占满
我就想做一个最简单的方案——打开浏览器,拖进去,对方就能收。不需要装任何客户端,不需要注册账号,文件不经过任何中间服务器。
于是就有了 千盈传送(fn_qycs)。
✨ 它是什么?
千盈传送 是一款部署在飞牛 NAS 上的轻量级文件传送工具,基于 WebRTC P2P 点对点传输 技术,让同一局域网(或跨公网)的设备之间可以直接互传文件。
核心一句话总结:
发送方 → 浏览器 ──P2P 直连── 浏览器 ← 接收方
文件数据全程不经过服务器,不占用 NAS 上传带宽。
🎯 核心特性
| 特性 | 说明 |
|---|---|
| 🚫 零安装 | 纯浏览器使用,无需安装任何客户端或 App |
| ⚡ P2P 直传 | WebRTC DataChannel 点对点,充分利用内网带宽 |
| 📱 全平台 | iOS / Android / Windows / macOS 全面支持 |
| 🖼️ 相册保存 | 图片/视频可一键保存到手机相册(需 HTTPS) |
| 🔒 内置反代 | 自带反向代理 + 自动证书,搭配飞牛 DDNS 即可外网访问 |
| 🌗 主题适配 | 自动跟随飞牛系统切换明暗模式 |
| 🏗️ 双架构 | x86_64 与 ARM64 均支持 |
| 🔑 暗号房间 | 6 位数字暗号创建私密房间,跨网也能传 |
📐 技术原理
整个传输流程非常清晰:
发送端 ──WebSocket 信令── 服务器 ──WebSocket 信令── 接收端
│ │
└──────────── WebRTC DataChannel (P2P 直连) ──────────────┘
文件数据走这里,不经过服务器
关键点:
- WebSocket 只负责设备发现和信令交换(极小流量)
- WebRTC DataChannel 负责真正的文件数据传输
- 服务器全程不参与文件传输,不占用 NAS 带宽
- 跨公网优先 STUN NAT 穿透直连,失败自动降级 TURN 中继
🚀 安装方式
方式一:飞牛应用中心手动安装(推荐)
- 到 GitHub Releases 页面下载最新版的
fn_qycs.fpk安装包 - 打开飞牛 NAS → 应用中心 → 手动安装
- 上传
fn_qycs.fpk,设置服务监听端口(默认5553) - 安装完成后自动启动,打开浏览器访问
http://NAS_IP:5553即可使用
方式二:从源码构建
# 克隆仓库
git clone https://github.com/Contribuv/fn_qycs.git
cd fn_qycs
# 构建(需要 Go 1.21+ 环境)
cd server-src
go build -o fn_qycs-server
# 启动服务
./fn_qycs-server --port 5553
📖 使用指南
场景一:局域网传输(最常用)
这是最简单的场景,比如办公室同事之间传文件、家里手机和电脑互传:
- 发送方 和 接收方 都打开浏览器,访问
http://NAS_IP:5553 - 发送方 拖入文件 或点击选择文件
- 右侧 在线设备列表 中点击接收方
- 点击 发送,接收方确认接收
- 传输完成,文件自动下载/保存到相册
💡 Wi-Fi 环境下通常可以跑满内网带宽,50MB 的文件几秒钟就传完了。
场景二:公网跨网传输(暗号房间)
双方不在同一网络?用 暗号房间:
- 发送方点击 「创建房间」,系统生成 6 位数字暗号(如
384721) - 把暗号发给接收方(微信/QQ/口头都行)
- 接收方输入暗号 「加入房间」
- 双方在房间内通过 WebRTC 建立 P2P 连接,直接传文件
⚠️ 注意:跨网传输依赖 NAT 穿透。大部分家庭宽带(锥形 NAT)可以直连;企业网络或对称型 NAT 可能需要配置 TURN 中继服务器。
场景三:手机保存到相册
想让对方收到图片/视频后能直接存到手机相册?
- 进入 「公网访问配置」
- 开启 HTTPS 反向代理,配置 HTTPS 端口(默认
7753) - 选择飞牛已签发的域名证书
- 确保路由器已配置 HTTPS 端口转发
- 用
https://开头的地址访问,接收图片/视频时即可一键保存到相册
🔑 关键点:iPhone / Android 浏览器 只在 HTTPS 环境下 才允许网页写入相册,HTTP 会被禁止。
⚙️ 传送设置说明
| 设置项 | 默认值 | 说明 |
|---|---|---|
| 单文件大小限制 | 50MB | 可自定义,最大 2GB,建议不超过 500MB |
| HTTPS 端口 | 7753 | 公网访问和相册保存需要 |
| TURN 中继 | 未配置 | 对称型 NAT 跨网传输时需要 |
| 房间暗号长度 | 6 位 | 数字组合,防暴力破解 |
📱 实测体验
我在几个真实场景中测试过:
| 场景 | 设备 | 文件大小 | 耗时 | 体验 |
|---|---|---|---|---|
| 家里手机→电脑 | iPhone → Mac | 200MB 视频 | ~15s | ⚡ 飞快 |
| 办公室电脑→电脑 | Win → Mac | 1.2GB 压缩包 | ~2min | 🚀 跑满千兆 |
| 跨城朋友互传 | Android → Win | 80MB 文档 | ~30s | ✅ STUN 直连成功 |
| 企业网络→家里 | Win → NAS | 50MB 文件 | 失败→配置TURN后成功 | ⚠️ 需TURN |
❓ 常见问题 FAQ
Q1:为什么接收方看不到发送方?
确保双方都在 同一局域网,且都通过浏览器打开了 同一个地址。防火墙或网络隔离(如访客网络)可能会影响设备发现。
Q2:图片/视频无法保存到手机相册?
手机浏览器需要 HTTPS 环境 才能写入相册。请在「公网访问配置」中开启 HTTPS 反向代理,用 https:// 地址访问。
Q3:传输速度慢?
P2P 直传速度取决于网络状况。同一 Wi-Fi 下通常可跑满内网带宽。如果跨网速度慢,可能是走了 TURN 中继,取决于中继服务器带宽。
Q4:跨网互传连接不上?
本应用优先尝试 STUN NAT 穿透直连,失败自动降级 TURN 中继。如果都没成功:
- 在「传送设置」中配置 TURN 服务器(推荐 metered.ca 免费申请)
- 或双方改为同一局域网 / 同一热点后直连
Q5:移动端下载大文件(>100MB)失败?
这是 浏览器技术瓶颈,非应用 Bug。移动端浏览器处理超大 Blob(>100MB)时内存不足,导致下载文件大小为 0。建议传输超过 100MB 的文件时使用 PC 端接收。
🗓️ 版本迭代记录
项目从 v1.0.0 到 v2.1.1,经历了大量迭代优化:
- v2.1.1:文件大小上限调整为 2GB,新增移动端超大文件警告
- v2.1.0:SQLite 数据库存储替代 JSON,TURN 连通性测试,网络能力智能检测
- v2.0.8:NAT 穿透优先直连,修复网络能力误判
- v2.0.7:传输稳定性大幅提升,刷新持久化,安全加固
- v2.0.6:公网反代修复,二维码分享,UI 优化
- v2.0.0:网络分组发现,暗号房间系统,IndexedDB 状态恢复
- v1.0.6:TLS 嗅探优化,IP 防欺骗,WiFi 雷达动画
详细更新日志见 CHANGELOG.md。
🔮 未来计划
- [ ] 文件夹批量传输(自动打包)
- [ ] 传输历史记录与断点续传
- [ ] 更多 TURN 服务商一键配置
- [ ] 微信小程序端(不依赖浏览器)
- [ ] 多语言国际化
📄 开源协议
MIT License — 可以自由使用、修改和分发。
🙏 致谢
感谢以下开源项目:
- WebRTC — 实时通信的基石
- qrcode-generator — 轻量二维码库
- 飞牛 NAS 社区 — 提供了优秀的部署平台
📬 反馈与贡献
- Bug 反馈:GitHub Issues
- 功能建议:欢迎提 Issue 或 PR
- 联系方式:项目主页 www.infowe.site/projects
💡 如果你觉得这个项目有用,欢迎给一个 Star ⭐ 支持一下!
评论功能已关闭