最近看到一个 transfer.zip-web
的开源项目,稍微体验了一下,感觉挺不错的!
在咱们自己动手之前,你完全可以先去官方的体验网站感受一下。
官方体验地址: https://transfer.zip
项目地址: https://github.com/robinkarlberg/transfer.zip-web
假设你已经有了一台自己的服务器,并且装好了 Docker 和 Docker Compose 。如果没有,可以快速搜一下教程,现在这基本是服务器的标配了。
登录你的服务器,跟着下面的命令敲就行:
# 1. 从 GitHub 把项目代码弄下来
git clone https://github.com/robinkarlberg/transfer.zip-web.git
# 2. 进入项目目录
cd transfer.zip-web
# 3. 创建一个默认的配置文件
# 这条命令会帮你生成一个 .env 文件,里面是一些基本配置,我们先用默认的
sh ./createenv.sh
# 4. 一键构建并启动!
docker compose build && docker compose up -d
搞定!服务已经跑起来了。因为 docker-compose.yml 配置中限制了只允许本地 IP 访问,并且我取消这段配置后,通过 IP 访问页面会出现报错的问题,有知道原因的可以评论区留言一下!
所以你还需要配置一个域名代理到本地,可以在服务器上装个 nginx,配置一个反向代理,按如下配置即可,这段在官方介绍中也有说明,关于反向代理的配置方式,可以自行搜索一下!
# Put this at the top
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# Put this in your server-block
# server {
# ...
location /ws {
proxy_pass http://localhost:9001/ws;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}
# ...
# }
你可以马上试试:
这体验,是不是比任何网盘都直接?
你可能会好奇,既然不存文件,那它是怎么从我的浏览器跑到朋友的浏览器的?这正是这个项目最聪明的地方,它会根据情况自动选择最佳传输路线。
1. 首选路线:WebRTC 点对点直连
这东西的核心技术是 WebRTC (网页实时通信),说白了,就是让两个浏览器可以直接“对话”。
当你朋友打开分享链接时,我们刚才搭的服务里的“信令服务器”( Signaling Server )会当一次中间人,帮你们俩的浏览器交换一下网络地址之类的信息,让它们能互相找到对方。一旦“握手”成功,信令服务器就功成身退了,数据直接在你和朋友的浏览器之间飞,不占用你服务器的一丁点带宽。这就是为什么它能传大文件,因为服务器根本不碰数据本身。
2. 后备路线:Relay 服务器中转
当然,现实没那么理想。如果你或你的朋友网络环境比较复杂,比如躲在好几层路由器或者严格的公司防火墙后面,P2P 直连可能会失败。
为了保证文件一定能传到,transfer.zip-web
设计了后备方案:Relay (中继)模式。
直连失败时,文件数据会先加密,然后一段一段地发到你的服务器,再由服务器转发给对方。这时候,你的服务器就成了一个临时的“快递中转站”。数据只是流过,并不会被存下来。
一个非常关键的细节: 根据项目的设定,当文件大于 10MB 时,为了保证传输的稳定和速度,程序会强制走 Relay 服务器中转模式,可以自行修改代码,处理这一块的限制。这一点一定要知道!这意味着,你用它传大文件时,是会实打实地消耗你服务器的带宽和流量的。
所以,真实的工作模式是:
在你把它当成主力工具前,还有几个小贴士:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.