FilePizza:浏览器内的点对点文件传输
FilePizza 是一个基于 WebRTC 的浏览器点对点文件传输开源项目,由 Alex Kern 与 Neeraj Baid 在 UC Berkeley 期间开发。它省去了其他网页文件分享服务必须先上传到服务器的步骤,数据不经过中间服务器存储,因此传输快速、私密且安全。官方托管实例位于 file.pizza。v2 版本带来全新 UI(支持深色模式)、移动端浏览器(含 Mobile Safari)支持、上传者到下载者的浏览器直连(WebRTC,不再使用 WebTorrent)与更快握手、上传者进度监控与主动中止、密码保护与举报等安全措施、多文件一次上传并以 zip 交付、基于 Service Worker 的流式下载,以及使用 Redis 的服务器状态进程外存储。
社区作者 · zZz
它解决什么问题
FilePizza 是一个在浏览器中完成点对点文件传输的开源 Web 应用。与其他网页文件分享服务不同,它利用 WebRTC 消除了“先上传到服务器”的中间环节:数据从上传者浏览器直接发送到下载者浏览器,不存储在中间服务器,因此传输过程快速、私密且安全。
项目提供了托管实例 file.pizza,也可以自托管运行。
FilePizza v2 的主要变化:
- 全新 UI,支持深色模式,构建于现代浏览器技术之上。
- 支持大多数移动浏览器,包括 Mobile Safari。
- 传输改为上传者到下载者浏览器之间的直连(WebRTC,不使用 WebTorrent),握手更快。
- 上传者可以监控传输进度,并可随时中止传输。
- 更完善的安全与保护措施:密码保护与举报功能。
- 支持一次上传多个文件,下载者会以 zip 文件形式接收。
- 通过 Service Worker 实现流式下载。
- 使用 Redis 在进程外存储服务器状态。
技术栈:Next.js、Tailwind、TypeScript、React、用于 WebRTC 的 PeerJS、View Transitions、Redis(可选)。
服务器可通过环境变量进行定制,包括 REDIS_URL、COTURN_ENABLED、TURN_HOST、TURN_REALM、STUN_SERVER、PEERJS_HOST、PEERJS_PATH。
许可证与致谢:FilePizza 以 BSD 3-Clause 许可证发布,披萨插画由 iblowyourdesign 提供。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
以下命令与配置均来自项目 README,来源未明确说明所需的 Node.js 版本与 pnpm 版本,需自行准备相应运行时环境(待核验)。
一、获取源码与本地开发
- 克隆仓库:
git clone https://github.com/kern/filepizza.git- 安装依赖:
pnpm install- 以开发模式运行:
pnpm dev- 构建生产版本:
pnpm build- 启动生产服务:
pnpm start二、使用 Docker 运行
pnpm docker:buildpnpm docker:uppnpm docker:down三、环境变量配置(可选项,未设置时使用默认值)
- REDIS_URL:用于存储频道(channel)元数据的 Redis 连接串。若不设置,FilePizza 会回退到内存存储。
- COTURN_ENABLED:设为 true 时启用 TURN 支持,以便连接位于 NAT 后的对等端。
- TURN_HOST:TURN 服务器的主机名或 IP,默认 127.0.0.1。
- TURN_REALM:生成 TURN 凭据时使用的 realm,默认 file.pizza。
- STUN_SERVER:当 COTURN_ENABLED 未启用时使用的 STUN 服务器 URL,默认 stun:stun.l.google.com:19302。
- PEERJS_HOST:自托管 PeerJS 服务器的主机名或 IP,默认 0.peerjs.com。
- PEERJS_PATH:自托管 PeerJS 服务器的路径,默认 /。
四、首次运行与常见问题(来自 FAQ)
- 文件如何发送?文件由你的浏览器直接发送到下载者的浏览器,不经过服务器;使用 WebRTC,因此上传者需要保持浏览器窗口打开直到传输完成。
- 可以多人同时下载同一个文件吗?可以,只需把短链接或长链接发给他们。
- 文件能有多大?取决于你的浏览器能处理的大小。
- 关闭浏览器会怎样?你的文件链接将不再可用;若某位下载者已完成传输,该下载者会继续向未完成的下载者做种子,但无法再发起新的下载。
- 文件是否加密?是。由于 DTLS,所有 WebRTC 通信都会自动使用公钥加密;还可为上传额外设置可选密码,增加一层安全保护。