豪子的又一个开源项目,千盈传送发布了,仅上线飞牛nas arm /x86

千盈传送:一个浏览器就能传文件,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 直连) ──────────────┘
                    文件数据走这里,不经过服务器

关键点:

  1. WebSocket 只负责设备发现和信令交换(极小流量)
  2. WebRTC DataChannel 负责真正的文件数据传输
  3. 服务器全程不参与文件传输,不占用 NAS 带宽
  4. 跨公网优先 STUN NAT 穿透直连,失败自动降级 TURN 中继

🚀 安装方式

方式一:飞牛应用中心手动安装(推荐)

  1. GitHub Releases 页面下载最新版的 fn_qycs.fpk 安装包
  2. 打开飞牛 NAS → 应用中心手动安装
  3. 上传 fn_qycs.fpk,设置服务监听端口(默认 5553
  4. 安装完成后自动启动,打开浏览器访问 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

📖 使用指南

场景一:局域网传输(最常用)

这是最简单的场景,比如办公室同事之间传文件、家里手机和电脑互传:

  1. 发送方接收方 都打开浏览器,访问 http://NAS_IP:5553
  2. 发送方 拖入文件 或点击选择文件
  3. 右侧 在线设备列表 中点击接收方
  4. 点击 发送,接收方确认接收
  5. 传输完成,文件自动下载/保存到相册

💡 Wi-Fi 环境下通常可以跑满内网带宽,50MB 的文件几秒钟就传完了。

场景二:公网跨网传输(暗号房间)

双方不在同一网络?用 暗号房间

  1. 发送方点击 「创建房间」,系统生成 6 位数字暗号(如 384721
  2. 把暗号发给接收方(微信/QQ/口头都行)
  3. 接收方输入暗号 「加入房间」
  4. 双方在房间内通过 WebRTC 建立 P2P 连接,直接传文件

⚠️ 注意:跨网传输依赖 NAT 穿透。大部分家庭宽带(锥形 NAT)可以直连;企业网络或对称型 NAT 可能需要配置 TURN 中继服务器。

场景三:手机保存到相册

想让对方收到图片/视频后能直接存到手机相册?

  1. 进入 「公网访问配置」
  2. 开启 HTTPS 反向代理,配置 HTTPS 端口(默认 7753
  3. 选择飞牛已签发的域名证书
  4. 确保路由器已配置 HTTPS 端口转发
  5. 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 社区 — 提供了优秀的部署平台

📬 反馈与贡献


💡 如果你觉得这个项目有用,欢迎给一个 Star ⭐ 支持一下!

https://github.com/Contribuv/fn_qycs

评论功能已关闭