news 2026/9/17 9:20:41

FilePizza 上手实践:不走服务器存储的浏览器 P2P 文件直传

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FilePizza 上手实践:不走服务器存储的浏览器 P2P 文件直传

FilePizza 上手实践:不走服务器存储的浏览器 P2P 文件直传

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

FilePizza 是一个开源的浏览器 P2P 文件传输工具:在浏览器里选好文件后,数据通过 WebRTC 数据通道直接发到接收方浏览器,全程不经过任何服务器存储。它针对的是传统传输服务"先上传到第三方、再让别人下载"带来的等待时间和文件留存问题,适合需要快速把素材或代码发给同事的个人用户,以及希望自建私有传输通道的团队。

FilePizza 是什么:一个只帮你搭桥的文件传输器

FilePizza 的工作方式可以概括为一句话:服务器只做信令,数据不走服务器。发送方浏览器向服务器注册一个频道并得到一个 slug(短 slug 是 8 位随机串,长 slug 是 4 个单词),接收方凭这个 slug 向服务器查询到发送方的 PeerJS 标识符,随后两者建立 WebRTC 数据通道,文件数据在两个浏览器之间直接流动。

这个设计带来两个使用上的特点:

  • 频道有生命周期。频道默认 TTL 为 1 小时,发送方页面打开期间会每分钟自动续期;页面关闭时频道随即销毁,链接不再可用(已完成下载的接收方会继续为未完成的接收方续传)。
  • 同一个链接可以被多人打开下载,把长链接或短链接发给不同的人即可。

三步把文件发给同事

发送方(共 4 步,第 2 步可选):

  1. 打开页面,把文件拖进上传区或点击添加。
  2. 在确认页核对文件列表,需要限制访问时在密码框输入密码,否则留空。
  3. 点击 Start,页面会生成二维码、长链接和短链接。
  4. 把链接发给接收方。传输期间页面会实时列出每个下载方的进度,点 Stop 可随时终止整场传输。

接收方(3 步):

  1. 打开链接,等待与发送方建立连接。
  2. 若设置了密码,输入正确密码后才会显示文件列表。
  3. 等待传输完成,浏览器直接保存文件到本地。

两个典型场景:批量传项目文件与保护敏感文件

批量传多个文件时:

  • 📦 选择多个文件后,接收方收到的不是零散文件,而是一个 zip 包,zip 流式打包逻辑会在发送过程中边打包边发,不需要先本地压缩。
  • 确认页支持逐个移除或继续追加文件,适合把整个项目目录或素材文件夹一次性打包发出。

传输敏感文件时:

  • 🔒 密码不是加密算法,而是一道前置门禁:接收方输入密码并验证通过之前,发送方不会告知有哪些文件。密码层叠在 WebRTC 自身的 DTLS 加密之上,即使有人拿到链接,没有密码也看不到文件清单。

无论哪个场景,如果传输中途断掉且发送方页面还开着,接收方重新打开原链接即可从上次确认的字节偏移处继续,协议层通过 Start 消息携带 offset 实现这一点。

传输失败或变慢时先查这三件事

  1. 发送方页面是否还开着。频道随页面关闭而销毁,链接失效后接收方看到的是页面不存在。若接收方只传了一半而发送方关闭了页面,需要重新发起传输。
  2. 网络能否打直连。双方都在 NAT 之后(常见于公司网络、移动网络)时,打洞可能失败。自建实例时把COTURN_ENABLED设为true并配置TURN_HOST,让数据走 TURN 中转即可解决,代价是速度受中转带宽限制。
  3. 并发下载方数量。所有下载方共享发送方的上行带宽,同时下载的人越多,单个接收方速度越低。

频道与 slug 的服务端存储逻辑见 channel 模块,默认使用 Redis,未配置REDIS_URL时退化为进程内存储,重启即清空。

服务器只存元数据:数据通道里发生了什么

整体交互用一张图说明:

文件在数据通道内按不超过 256 KiB 的分片发送,每片有确认,最后一片以 final 标志收尾。服务器侧只保存"slug → 发送方 PeerJS 标识符"这条映射及其过期时间,文件字节本身从未落盘到任何服务器。完整消息类型与传输时序(含密码流程和断点续传)可参考 传输协议说明,该协议是纯 JSON 消息约定,也可以用于实现兼容的第三方客户端。

一条命令搭好私有实例:Docker 部署 FilePizza

自建实例适合有数据合规要求、或需要稳定 TURN 中转的团队。仓库自带 docker-compose 编排,一次拉起应用、Redis 和 coturn 三个服务:

git clone https://gitcode.com/GitHub_Trending/fi/filepizza cd filepizza pnpm install && pnpm docker:build && pnpm docker:up

容器起来后访问http://localhost:8080即可使用。需要调整行为时主要看三个环境变量:REDIS_URL指定频道元数据存放位置,COTURN_ENABLEDTURN_HOST控制是否启用以及中转地址,STUN_SERVER在关闭 coturn 时提供 STUN 发现能力。不想用 Docker 的话,pnpm dev直接起开发环境(dev:full脚本会连同 Redis 和 coturn 一起启动),端口为 3000。

日常临时分享文件,用现成的托管实例最省事;文件性质敏感或传输量大时,自建实例能自己控制 TURN 与存活时间。下一步可以直接按上面的三条命令在本地跑起来,把任意一个测试文件传到手机上,用页面生成的二维码完成一次完整的跨设备传输。

【免费下载链接】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 9:20:16

Spring Cloud Alibaba构建高并发优惠券查询系统实践

1. 项目背景与挑战作为"微赚淘客系统3.0"的核心研发成员,我们面临一个极具挑战性的技术需求:为微信公众号"查券助手"构建一个能够支撑日均200万次商品券查询请求、峰值QPS超过3500的高可用服务系统。这个系统需要满足以下几个核心需…

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

开放式代码评审实践:从流程设计到工具链落地的完整指南

做代码评审这行当久了,你会发现一个有意思的现象:很多人提起 code review 又爱又恨。爱的是它确实能挡掉不少低级 bug,恨的是它太依赖人的状态和自觉。项目一忙起来,评审就变成了走过场,绿点一点、 approve 一按&#…

作者头像 李华
网站建设 2026/9/17 9:18:53

YOLOv8模型改进实战:Backbone/Neck/Head优化与剪枝避坑指南

1. 这不是“YOLOv11”,但你必须先搞懂它才能真正改进模型先说一句大实话:目前官方并没有发布YOLOv11。Ultralytics官网最新稳定版本仍是YOLOv8,v9和v10均未正式开源(截至2024年中),所谓“YOLOv11”在主流学…

作者头像 李华
网站建设 2026/9/17 9:18:22

人工势场法路径规划:Matlab实现与参数调优全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华