news 2026/9/17 15:58:26

FilePizza浏览器P2P直传文件:3步免中继,大文件浏览器直接传

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FilePizza浏览器P2P直传文件:3步免中继,大文件浏览器直接传

FilePizza浏览器P2P直传文件:3步免中继,大文件浏览器直接传

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

传个视频给同事,先传到网盘,对方再登录下载——慢,而且文件留在了别人服务器上。FilePizza 用浏览器 P2P 文件传输解决了这个问题:双方各开一个网页,通过 WebRTC(浏览器内置的点对点通信技术)直连,文件数据从一个浏览器直接进另一个浏览器,不经过任何服务器存储。

初见印象:服务器只发"门牌号"

  • 零存储:文件不落盘服务器
  • 浏览器直传:WebRTC 点对点通道
  • 链接分享:一个短 slug 可发多人
  • 移动端可用:Mobile Safari 也支持
  • 密码保护:可选的额外一层

拆解原理:slug 像门牌号,数据走暗道

把服务器想象成前台:它只负责发"门牌号"和指路,不碰行李本身。上传者创建频道时,服务器生成一个 slug——这个字符串里编码了上传者的 PeerJS(封装了 WebRTC 信令的库)标识。下载者拿着 slug 找服务器,服务器把标识"翻译"给他,之后两人的所有消息就绕开服务器,直接走 WebRTC 数据通道。完整消息定义见传输协议文档。

一次传输的关键流程:

  1. 上传者选文件,服务器创建频道并返回 slug
  2. 分享链接(含 slug)发给下载者
  3. 下载者凭 slug 向服务器解析出上传者标识
  4. 双方建立 DTLS 加密的 WebRTC 数据通道
  5. 文件按 256KB 分块发送,接收方逐块回执确认

上手体验:3步完成一次传输

  1. 打开页面,上传者选择文件
  2. 需要时勾选并填写密码
  3. 把生成的链接发给接收方
  4. 接收方打开链接,点击开始下载
  5. 双方盯着进度条,传输结束点保存
  6. 注意:上传者全程别关页面

体现巧思的细节

多文件自动打包成 zip

一次选多个文件,接收方拿到的是一份 zip 包。打包逻辑在 src/zip-stream.ts 里采用流式写法,边压边发,不把整个压缩包攒在内存里。

断点续传:Pause 与按偏移续传

下载中途断了或主动暂停,重连后带着"已确认偏移量"重新发 Start 消息,传输从上次停下的位置继续,不用从头再来。

密码保护:握手多两步

设置密码后,下载者的 RequestInfo 会先收到 PasswordRequired,再用 UsePassword 提交密码;错了就再要一次,对了才放文件元数据。

私有部署:三条命令

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

本地跑默认用内存存储,重启即清空;要持久化配REDIS_URL,公网部署跨 NAT 时再配好 TURN(COTURN_ENABLED=trueTURN_HOST等变量)。

快速答疑

Q:传一半能关浏览器吗?不能。上传者关页后链接立即失效,未完成的下载中断;已下载完的人还可以继续给未完成的人"补传"。

Q:能传多大的文件?没有硬性上限,瓶颈在浏览器内存和设备性能,几 GB 内一般都没问题。

Q:传输是加密的吗?是。WebRTC 通道默认经 DTLS 公钥加密,再加可选密码是双保险。

FilePizza 的价值很直白:把"上传—中转—下载"砍成"直传",省掉中间存储的等待和隐私风险,代价是上传方必须在线盯着进度。它用 Next.js + React + TypeScript 写界面,靠 PeerJS 处理 WebRTC 信令与连接,React Query 管状态,Redis 只是可选的元数据存储——整个系统轻得刚好够用。

【免费下载链接】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 15:57:02

Directory.Build.props:MSBuild构建统一配置的核心机制

1. 为什么一个空文件能接管整个解决方案的编译逻辑?在 Visual Studio 2022 的实际项目维护中,我第一次见到Directory.Build.props文件时,它就静静地躺在解决方案根目录下,连一行 XML 都没有——打开后只有标准的 XML 声明和一个空…

作者头像 李华
网站建设 2026/9/17 15:56:59

transcribe.cpp流式API陷阱清单:5个常见错误与状态机使用规范

transcribe.cpp流式API陷阱清单:5个常见错误与状态机使用规范 【免费下载链接】transcribe.cpp ggml speech-to-text inference for 16 model families 项目地址: https://gitcode.com/GitHub_Trending/tr/transcribe.cpp transcribe.cpp 是基于 ggml 的 C …

作者头像 李华
网站建设 2026/9/17 15:56:43

LTP7792低噪声LDO原理与高精度供电实战指南

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

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

IDEA中解析Git Log:从可视化操作到命令行实战

1. 为什么要在IDEA里折腾Git Log先说个真实场景。前阵子同事跑来问我,说线上有个接口突然变慢了,明明上周还好好的,问我能不能查出来是谁改的。我打开IDEA,切到Git工具窗口的Log标签页,输入文件路径,再按时…

作者头像 李华