别再用网盘传大文件了,教你搭一个私人“阅后即焚”的文件传输服务

20 天前
 JustW

最近看到一个 transfer.zip-web 的开源项目,稍微体验了一下,感觉挺不错的!

在咱们自己动手之前,你完全可以先去官方的体验网站感受一下。

官方体验地址: https://transfer.zip

动手搭建:用 Docker 快速启动

项目地址: 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. 在页面上点击 [ Upload File ] ,随便选个文件,越大越能看出效果。
  2. 它会立刻生成一个链接和一个二维码。
  3. 把链接发给你的朋友(或者自己用手机扫码也行),你会看到页面提示“Waiting for receiver”。
  4. 当对方打开链接,文件传输就开始了。进度条会实时滚动,速度基本就取决于你俩的网速。

这体验,是不是比任何网盘都直接?

它到底是怎么工作的? P2P 还是服务器中转?

你可能会好奇,既然不存文件,那它是怎么从我的浏览器跑到朋友的浏览器的?这正是这个项目最聪明的地方,它会根据情况自动选择最佳传输路线。

1. 首选路线:WebRTC 点对点直连

这东西的核心技术是 WebRTC (网页实时通信),说白了,就是让两个浏览器可以直接“对话”。

当你朋友打开分享链接时,我们刚才搭的服务里的“信令服务器”( Signaling Server )会当一次中间人,帮你们俩的浏览器交换一下网络地址之类的信息,让它们能互相找到对方。一旦“握手”成功,信令服务器就功成身退了,数据直接在你和朋友的浏览器之间飞,不占用你服务器的一丁点带宽。这就是为什么它能传大文件,因为服务器根本不碰数据本身。

2. 后备路线:Relay 服务器中转

当然,现实没那么理想。如果你或你的朋友网络环境比较复杂,比如躲在好几层路由器或者严格的公司防火墙后面,P2P 直连可能会失败。

为了保证文件一定能传到,transfer.zip-web 设计了后备方案:Relay (中继)模式。

直连失败时,文件数据会先加密,然后一段一段地发到你的服务器,再由服务器转发给对方。这时候,你的服务器就成了一个临时的“快递中转站”。数据只是流过,并不会被存下来。

一个非常关键的细节: 根据项目的设定,当文件大于 10MB 时,为了保证传输的稳定和速度,程序会强制走 Relay 服务器中转模式,可以自行修改代码,处理这一块的限制。这一点一定要知道!这意味着,你用它传大文件时,是会实打实地消耗你服务器的带宽和流量的。

所以,真实的工作模式是:

用之前,你需要知道的几件事

在你把它当成主力工具前,还有几个小贴士:

  1. 链接是“活”的:传输链接和你打开的网页是绑定的。如果你上传了文件然后关了网页,链接就失效了。你必须保持上传页面开着,直到朋友接收完。
  2. 真的不存文件:再强调一遍,这不是网盘。它的使命就是“安全送达”,送到了就没它事了,服务器上啥也不留。
  3. 上个域名和 HTTPS 更靠谱:用 IP 地址访问毕竟不方便也不够安全。我强烈建议你给它配个域名,然后用 Nginx 或 Caddy 这类工具做个反向代理,顺便把免费的 HTTPS 证书也配上。这能让你的服务看起来更专业,用起来也更安心。
  4. 盯着点服务器流量:既然知道了传大文件会吃服务器带宽,那就要对你服务器的流量套餐心里有数。如果你和朋友天天传几十 G 的东西,那普通的小水管服务器可能就吃不消了。

原文: https://mp.weixin.qq.com/s/UfEGe_lw0lSjFmZ2wrbwCw

3395 次点击
所在节点    分享发现
23 条回复
docx
20 天前
我一直用的 copypaste.me ,也是 P2P ,除了传文件,还能传文本,配对也比较方便
hewitt29
20 天前
大文件点对点用 QQ 不就完了。。费这劲,要的就是小文件方便下载啊。。
SnowMountain
20 天前
能部署在 Cloudflare Worker 就很棒了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1141094

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX