news 2026/9/17 8:44:27

FilePizza|浏览器直传文件的 WebRTC 点对点方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FilePizza|浏览器直传文件的 WebRTC 点对点方案

FilePizza|浏览器直传文件的 WebRTC 点对点方案

【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizza

当你需要把一个文件交给对方、又不想让内容经过任何第三方网盘或中转服务器时,FilePizza 是一个直接的选择。它是一款基于 WebRTC 的浏览器点对点文件传输工具,上传和下载都发生在两个浏览器之间,文件内容不落盘在中间服务器。选好文件生成一个短链接发给对方,对方浏览器打开链接后传输即开始,速度取决于你和对方的上行带宽。

30 秒跑起来

克隆仓库、安装依赖并启动开发服务器,浏览器打开本机地址就能看到上传页面。默认配置不需要 Redis 和 TURN,开箱即可在本地或局域网内体验。

git clone https://gitcode.com/GitHub_Trending/fi/filepizza cd filepizza pnpm install pnpm dev

用 Docker 启动

容器方式包含完整的编排配置,构建后直接拉起即可,停止时运行pnpm docker:down

pnpm docker:build pnpm docker:up

它到底解决了什么问题

传统网盘类工具的模式是"先上传到服务器,对方再下载",文件必然在中间环节停留一次。FilePizza 用 WebRTC 把这条链路拆成了浏览器到浏览器的直连。

点对点直传,文件不经过服务器

服务器只负责在两端之间完成信令和寻址,文件本身从你的浏览器直接流到对方浏览器。对你意味着:传内部文档或隐私资料时,不用担心内容停留在别人的服务器上;传输速度也不受限于中转服务器的出口带宽。

多文件打包成 zip

一次可以选择多个文件上传,下载方收到的是一份 zip 压缩包,而不是逐个文件反复协商。配合 Service Worker 的流式下载,接收端边收边写盘,大文件不必等全部到位才能保存。

密码保护与举报入口

上传时可以为链接加一个可选密码,没有密码的人打开下载页只会看到密码输入框;页面同时提供举报按钮,方便自托管运营者处理违规链接。

移动浏览器也能用

实现基于现代浏览器标准,Mobile Safari 等移动端浏览器同样可以完成传输,对方用手机打开链接就能收文件,不用要求对方装 App。

部署与配置

服务器行为由以下环境变量控制,全部可选:

变量默认值作用
REDIS_URL未设置存储通道元数据;不配则回退到内存存储
COTURN_ENABLED未设置设为true启用 TURN,帮助 NAT 后的两端建立连接
TURN_HOST127.0.0.1TURN 服务器的主机名或 IP
TURN_REALMfile.pizza生成 TURN 临时凭证时使用的 realm
STUN_SERVERstun:stun.l.google.com:19302未启用 TURN 时使用的 STUN 地址
PEERJS_HOST0.peerjs.com自托管 PeerJS 服务器的地址
PEERJS_PATH/自托管 PeerJS 服务器的路径

两个可选项的影响一句话说明:不配 Redis 时状态存在内存里,单实例部署没问题,进程重启后已有链接会失效;不开 TURN 时,如果上传和下载双方都处于 NAT 之后,连接可能建立不起来。

底层怎么工作的(简述)

整个流程分三步建立连接:上传者在浏览器选完文件后,通过 REST 向服务器创建一个通道,服务器返回一个短/长 slug,里面编码了上传者的 PeerJS 标识;下载者打开含 slug 的链接,服务器据此解析出上传者的 PeerJS ID;之后的握手、文件分块与确认全部直接在两台浏览器之间的 WebRTC 数据通道上进行,服务器不再接触任何文件内容。文件按最大 256 KiB 的块发送并逐块确认,保证传输可靠。想读完整消息协议可以看 docs/file-transfer-protocol.md,通道与 slug 的生成逻辑在 src/channel.ts,TURN 凭证生成在 src/coturn.ts。

边界与常见问题

文件大小有限制吗

服务器侧没有限制,理论上只受浏览器内存和双方带宽约束。需要注意的是上传方必须保持浏览器窗口打开,直到传输完成。

可以同时给多人下载吗

可以。把短链接或长链接发给多个人,每个人都会独立与上传方建立一条 WebRTC 连接,互不影响。

关掉浏览器后会怎样

文件链接立即失效,无法再发起新的下载。但已经完成传输的下载方会继续为没下完的人提供种子,部分下载还能补完。

传输内容加密吗

会的。所有 WebRTC 通信经 DTLS 自动进行公钥加密,还可以给上传链接再加一层可选密码作为额外门槛。

为什么有时连接建立不起来

取决于网络环境。任一端在公网或 STUN 可达时握手很快;两端都藏在复杂 NAT 之后又没开 TURN 时,很可能连不上。这是 WebRTC 打洞的固有限制,生产部署建议启用 TURN。

许可与致谢

FilePizza 采用 BSD 3-Clause 许可证 发布。仓库中的披萨插图由 iblowyourdesign 创作,特此致谢。

【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizza

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 8:43:14

OpenMontage实操指南:开源视频拼接工具的完整使用流程

最近开源工具圈里有个名字挺显眼的:OpenMontage。好几个剪辑群里都在转它的下载链接,讨论最多的问题是“下载后到底怎么用”。我花了两天时间把它跑通,又拿几段真实素材试了试拼接、转场、字幕和导出,今天把完整的落地流程&#x…

作者头像 李华
网站建设 2026/9/17 8:42:19

Wagmi Connector 开发全指南:从零创建并上架一个钱包连接器

Wagmi Connector 开发全指南:从零创建并上架一个钱包连接器 【免费下载链接】wagmi Reactive primitives for Ethereum apps 项目地址: https://gitcode.com/GitHub_Trending/wa/wagmi 本篇指南以 Wagmi 仓库中的 creating-connectors.md 为核心脉络&#xf…

作者头像 李华
网站建设 2026/9/17 8:41:39

COMSOL多物理场仿真在超声辅助解冻中的应用与优化

1. 项目概述:当三文鱼刺身遇上COMSOL仿真那天实验室的冰箱突然罢工,我精心准备的三文鱼样品在-20℃到4℃的过渡区停留了整整两小时。就在我手忙脚乱抢救样本时,电脑屏幕上COMSOL的仿真曲线突然开始跳探戈——热传导系数和相变潜热的参数设置居…

作者头像 李华
网站建设 2026/9/17 8:40:05

VS Code MinGW头文件路径配置全指南

1. 这个报错到底在说什么&#xff1f;——从编译器视角看懂“检测到 #include 错误”你刚在 VS Code 里敲完#include <stdio.h>&#xff0c;还没点运行&#xff0c;编辑器就在头文件那行底下画了一条鲜红的波浪线&#xff0c;鼠标悬停弹出提示&#xff1a;“检测到 #incl…

作者头像 李华
网站建设 2026/9/17 8:38:41

UBSAN实战:用未定义行为检测器揪出C/C++的隐蔽bug

我见过不少项目在正式发布前跑得好好的&#xff0c;一换编译器版本、一开优化等级就出诡异问题&#xff1a;数组偶尔越界、整数溢出后逻辑跑偏、除法的除数是零却只在极端输入下触发。这种问题最难定位&#xff0c;因为不是每次运行都崩&#xff0c;一旦崩了又很难复现。UBSAN …

作者头像 李华
网站建设 2026/9/17 8:37:52

SpringBoot智慧停车系统设计与实现

1. 智慧停车系统设计背景与核心价值停车难问题已经成为现代城市发展的痛点。根据我多年参与智慧城市项目开发的经验&#xff0c;传统停车管理存在三大核心问题&#xff1a;车位信息孤岛导致资源浪费、停车导航缺失造成时间损耗、人工管理效率低下。这个基于SpringBoot的智慧停车…

作者头像 李华