FilePizza 浏览器 P2P 文件传输上手指南
【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizza
周五 17:50,渲染同事老周把 2.4 GB 的交付素材要发给异地的合作方。按老路子,先上传网盘,进度条才走到 40%;再转给对面,还得等对方从网盘拉下来,来回又是大半天。
FilePizza 走的是一条更直接的路线:一个在浏览器里完成点对点(P2P,设备与设备直接对话,不走中转)文件传输的开源工具。文件从发送方的浏览器直接流进接收方的浏览器,全程不经过任何第三方服务器。它基于 WebRTC(浏览器内置的实时通信技术),官方还维护着在线实例,打开就能用。
3 个理由,看看 FilePizza 值不值得试
快,因为少绕了一段云
传统网盘分享的链路是"先传到服务器,再由对方从服务器拉"。FilePizza 把上传这一步直接省掉了,数据只在两端浏览器之间流动。速度取决于双方带宽和距离,服务器不参与搬运。
翻译成人话:传 100 GB 和传 100 KB,走的都是同一条浏览器直连通道,文件不会先去"快递站"再转手。
隐私,靠"文件根本不落地"
文件在传输过程中不会出现在任何中间服务器上。同时 WebRTC 通道自带 DTLS 加密(一种自动协商密钥的传输层加密),再叠加可选的密码保护。
翻译成人话:就算服务器被翻个底朝天,也翻不到你的文件,因为它从来就没上去过。
零门槛与零成本
浏览器打开即用,不用注册、不装软件、不装插件,移动端浏览器(包括 Mobile Safari)也能跑。项目开源,BSD 3-Clause 协议,无文件数量、无使用次数限制。
翻译成人话:不收钱、不占地方,用浏览器能打开的地方就能用。
| 对比维度 | 网盘分享 | 邮件附件 | FilePizza |
|---|---|---|---|
| 文件路径 | 先上传,服务器中转 | 服务器中转 | 浏览器到浏览器 |
| 隐私程度 | 文件存于第三方 | 受邮件服务商管控 | 不经过任何中间服务器 |
| 使用门槛 | 注册账号、上传等待 | 有附件大小限制 | 打开网页即可,链接 1 小时自动过期 |
30 秒看懂 FilePizza 的工作原理
- 选文件后,服务器生成一条短链接和一条长链接(短链接是 8 位随机码,长链接是 4 个单词拼成的,都更难被猜到)。类比:给包裹贴一张取件码。
- 接收方打开链接,向服务器查询这个链接对应哪个发送方。类比:拿取件码到前台扫码定位快递柜。
- 两个浏览器通过 WebRTC 直接握手、建起加密数据通道,服务器只负责"介绍认识"。类比:双方通了电话,之后的对话跟电话局无关。
- 文件被切成最多 256 KiB 的块,从发送方浏览器逐块推到接收方,每块都有回执确认。类比:一箱水果分批搬,每箱签收。
- 传完自动断开,服务器端的链接过期作废。类比:搬完货,仓库不留底单。
完整的消息协议(请求信息、开始传输、数据块、确认等 11 种消息)写在 docs/file-transfer-protocol.md 里,想搞懂细节可以对着看。
5 分钟跑通第一次 FilePizza 传输
- 浏览器打开 FilePizza 页面(官方实例是 file.pizza,也可按本文后面的方式自部署)。
- 点"添加文件",或把文件直接拖进页面;多文件会自动打包。
- 页面生成短链接和长链接,复制任意一条发给接收方。
- 接收方点开链接,确认文件信息后开始下载;发送方页面实时看到进度。
- 传输结束,页面可停止传输,链接一小时后自动失效。
⚠️ 易踩的坑:发送方的浏览器窗口必须全程开着,中途关掉页面,链接立刻失效。
💡 顺手记一下:同一条链接可以同时发给多人下载,不用重复建任务。
进阶玩法与高频问题
场景:发敏感文件
加一层密码,只有知道密码的人才能开始下载。
- 创建传输时设置密码
- 通过另一个渠道把密码告知接收方
- 密码错误时对方看不到任何文件信息
场景:传一组文件
多个文件会被流式打包,接收方拿到的就是一个 zip。
- 一次拖入整个文件夹的内容
- 无需自己先压缩
- 接收方保存时自动落为 zip 文件
场景:大文件、弱网
下载方可暂停,之后从上次确认的偏移量继续。
- 弱网时先暂停,等网络恢复
- 重连后接着传,不从头再来
- 发送方也可以在页面主动停止传输
场景:公司内网传文件
两边都在 NAT 后面、直连连不上时,启用 TURN 中继。
- 部署时设置
COTURN_ENABLED=true - docker-compose.yml 已内置 coturn 服务,开箱可用
高频问题速答
Q:传到一半断网了怎么办?接着传。重连后从最后一个确认的偏移量处继续,不用从头开始。
Q:文件有大小上限吗?没有硬性上限。项目 FAQ 的原话是"你的浏览器能处理多大就是多大"。
Q:发送方关掉浏览器会怎样?链接立刻失效,不能发起新下载。已传完的接收方会继续给传了一半的人做补充分发。
Q:传输是加密的吗?是。WebRTC 通道默认使用 DTLS 加密,密码保护是可选的额外一层。
Q:能同时发给多人下载吗?能。同一条链接发给几个人即可,同时下载的人越多,单人速度会摊薄。
私有部署:Docker 三条命令跑起来
git clone https://gitcode.com/GitHub_Trending/fi/filepizza cd filepizza pnpm docker:build pnpm docker:up起来之后浏览器访问http://localhost:8080。compose 文件里已经带了 Redis(存频道元数据)和 coturn(NAT 中继)两个服务,见 docker-compose.yml。
手动部署只记三步:pnpm install装依赖 →pnpm build构建 →pnpm start启动。
| 配置项 | 作用 |
|---|---|
REDIS_URL | 频道元数据存到哪;不设置则用内存存储 |
COTURN_ENABLED | 设为true后启用 TURN,帮 NAT 后面的设备互连 |
TURN_HOST | TURN 服务器地址,默认127.0.0.1 |
架构鸟瞰:数据都往哪走
发送方浏览器 ──WebRTC/PeerJS 直连──▶ 接收方浏览器 │ │ └──────── REST(信令/短链)──────▶ FilePizza 服务器数据走浏览器之间的 WebRTC 通道,服务器只在建连阶段被问到一句"这个链接是谁"。频道(链接加对应关系)的存取逻辑在 src/channel.ts 中,默认存活 1 小时。
接下来可以做什么
- 打开官方实例 file.pizza,传一个小文件走一遍完整流程
- 按上面的 Docker 命令在自己机器上搭一套,体验私有部署
- 读一遍 docs/file-transfer-protocol.md,看看两个浏览器之间到底在聊什么
选一条动手就好。文件只在两端浏览器之间流动、服务器不留存——这大概也是 FilePizza 最省心的地方。
【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizza
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考