一条链接、零服务器存储:FilePizza 让浏览器直接 P2P 传大文件
【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizza
FilePizza 是一个浏览器 P2P 文件传输工具。发送方和接收方各自打开网页,两端直接建立连接,文件在中间流动,全程不经过任何中转服务器。整个 WebRTC 文件传输过程都发生在浏览器里,好处很具体:不用先传网盘再下载,文件内容也不会落在服务器上。
先画条线:一条链接,零中转 🚀
传统分享有个绕不开的环节——先把文件塞进网盘或某个托管空间,对方再从那里取走。服务器卡在中间,速度被"你上传、他下载"两段链路同时拖着,文件本身还得被完整存一份。FilePizza 把这段路砍掉了:选完文件,数据就从你这边的浏览器内存直接流向对方浏览器内存,快不快只取决于双方各自的家宽。
slug 里装着什么:服务器只发通讯录
你选好文件后,上传方浏览器会先到服务器"登记",换回一个 slug,可以理解成一条地址。地址分短码和长码两种形态,短码就几个字符,长码由几个随机词拼成,两者指向同一条传输通道。
服务器上围绕 slug 存的只是元数据:上传方此刻挂在网络上的 PeerJS 对等 ID、通道的密钥和到期时间。通道带 TTL,期间会自动续期,过期即失效。不装 Redis 时这些数据放在服务器内存里,装了 Redis 就落到 Redis,文件字节一个都没经过它。
接收方点开链接,服务器把上传方的 ID 交给他,双方握手接通。服务器的活到这就干完了,递出去的是地址簿,不是包裹。
数据通道:文件字节怎么流动
真正跑数据的是 WebRTC 数据通道(Data Channel)。通俗讲,就是两个浏览器之间自己打通的一根管道,DTLS 加密是管道自带的锁——WebRTC 标准内置的公钥加密,不用你做任何配置。
管子里跑的是一组 JSON 消息,整场传输像一段约定好的对话:
- 接收方先发 RequestInfo,问"你有什么"
- 发送方回一份 Info,列出文件名、大小、类型
- 接收方用 Start 指明要哪个文件、从哪个偏移开始
- 发送方把文件切成小块回传:每个 Chunk 最多 256 KiB,末尾用 final 标志位收尾
- 每收一块,接收方回一条 ChunkAck 确认;全部取完,发 Done 收场
有这套确认机制,断点续传才成立。连接掉线、或者接收方主动发 Pause 暂停,重连后用 Start 带上最后已确认的偏移量,发送方就从那个位置接着送,不用从头再来。每条消息的字段细节,仓库里这份文件传输协议文档都写清楚了。
3 步建好一条传输链接 🔗
上手比想象中省事:
- 打开页面,点选文件,支持一次多选
- 想加锁就填个密码,不想就跳过
- 页面生成链接,发给对方
接收方点进链接后,若设过密码,页面会先回 PasswordRequired 拦住,等他发对 UsePassword 才肯亮出文件列表。随后点下载,进度条实时走。上传方这边也能盯着进度,随时喊停。
有两点值得先说破:发送方的窗口必须开到传输结束,关掉浏览器链接当场失效——不过已经下完的人会把剩下的部分继续补给没下完的人;文件大小没有硬上限,天花板是浏览器自己吃得消多少。
密码锁、ZIP 打包、手机上收文件 📱
一次选了多个文件时,对方拿到的不是一堆散件,而是一个完整的 zip。关键在于打包不是先把整包压好再发,而是流式 ZIP 打包模块边收边压:数据按块流入,即时缝进 zip 结构,再交给 Service Worker 做流式落盘,大文件也不会先吃爆内存。
v2 版本把移动端也纳入范围,大多数手机浏览器都能跑,Mobile Safari 也在名单里,出门在外用手机发文件不再卡关。
30 秒自托管:clone、装依赖、跑起来 🛠️
想部署一套自己的,三条命令就能启动:
$ git clone https://gitcode.com/GitHub_Trending/fi/filepizza $ pnpm install $ pnpm dev底下的技术组合都是熟面孔:Next.js、React、TypeScript 搭页面,Tailwind 管样式,React Query 管状态,PeerJS 负责 WebRTC 建连,View Transitions 做页面转场,Redis 按需存通道元数据。两台机器都躲在 NAT 后面直连不通时,用COTURN_ENABLED、TURN_HOST这类环境变量接一个 coturn 做 TURN 中转即可。安全侧还留了举报通道:接收方可以发起 Report,上传方会广播给所有在传的连接并跳转举报页,其余人随即中止下载。
收尾:文件走最短路线
文件从你手里到对方手里,最理想的路线就是别绕路。服务器只递一张地址,包裹自己走路——这大概就是浏览器 P2P 文件传输最实在的浪漫。
【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizza
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考