« ZeroMQ 的模式 | 返回首页 | Go 语言初学实践(1) »

分享文件服务

今天一个朋友用 qq 邮箱给我发了个 200+ M 的大文件,我无法提取。这让我意识到,在网络上分享大文件也是个比较大的需求。此类服务很多,历史也很悠久(很多网盘也被用户用来解决此问题)。但好用的并不多。

记得 opera 的新版也提供了分享本机文件的功能,可能是墙的原因,在国内也很难用。

我觉得如果为公众提供一个方便的渠道(又尽量压缩成本)来分享自己机器上的文件,或许会有许多用户的。关键在于便捷,功能纯粹。

最简单的方法是让发送文件方在本机架一个 web server ,然后把文件放到 web server 可以管理的文件服务目录中去。这个方案最好实施,对于懂行的同学来说,windows linux 等都提供有 httpd 服务,设置一下即可。对于不懂的同学,提供一个小型软件安装一下也很容易。而文件接收方仅需要用浏览器下载文件即可。

但是这个方案有很大的缺陷。大多数人机器都在防火墙背后,也没有权限可以在网关上设置 NAT 。很大可能是无法使用的。另外,架设 server 隐藏有一定安全上的风险。

而我的想法是这样的:

制作一款简单的小软件鼓励用户安装。(类似 DropBox 那样,只有安装了 client 才能享受服务)

这个软件负责分享本机上的文件,软件设置可以简化到只关联一个文件夹即可。它本身只提供一个 localhost 的 web 服务,方便用户监测自己分享出去的文件列表,以及分享进度等。

在公众网上提供一个 web 服务,其实是一个 proxy 服务,把文件请求转发到每个用户本机的 client 上。注:这里公众网和每个用户机的沟通并不通过 http 协议。而走一个 tcp 长连接。

用户想分享文件的时候,通过本机的服务,获得分享文件夹内指定文件的一个 URI 。这个 URI 其实是由公众服务生成的,类似短网址服务那样的。

文件分享方可以把这个 URI 通过其它手段(比如 IM)发送给接收者。接收者可以用浏览器直接下载。

这个下载过程,公众网上的 web server 只是起到 proxy 作用,一般不 cache 整个文件。仅仅把文件的一段段从用户 client 那里拉过来转发。架设这个公众网上的服务只有带宽成本,无储存成本。

由于用户 client 是定制的软件,可以知道对方下载的进度等等,用起来就和 IM 上传送文件无差别。

这个方案对文件接收者是无额外代价的。

如果服务想收费,可以用用户付费获得更大的带宽或是允许广播文件(允许多个接收方同时下载,或开放多线程下载,甚至是 cache 文件服务即提供储存)

用户 client 这边,如果设计良好,可以非常方便的实现多平台(甚至智能手机平台,方便分享照片等)。甚至 client 也可以开源,让用户用的放心,并鼓励第三方应用。


在构思的时候,我也想过在 client 中提供 p2p 功能,实现起来也很容易。但后来觉得这个功能虽有一定价值,但会破坏整个产品的纯粹性。

Comments

你这个想法不错,国内已经有人实现了类似的想法,不用client,直接就是网页分享,p2p实现,地址是http://henduan.com/cs

http://www.36kr.com/sendoid-makes-sharing-big-files-isnt-a-huge-pain/
Y Combinator出来的一个项目,俨然跟您描述的产品一致。。。

其实是IM的一个扩展了。为IM设置一个共享目录,然后好友通过proxy可以读取到这个共享目录,并下载文件。

如果是1v1,那么用IM软件传就行了;如果是1vN,干嘛不先传到公网去呢。

必须双方都在线,而且带宽也不便宜

@David

此应用场合就不考虑发送方关机的情况。大部分场合下,发送带宽远小于接收带宽,至少不会倒置。

发送完,也就接收完了。

发送方关机了怎么办?

话说这种不带审核的传播在天朝恐怕没有人敢假设这种服务吧

sharepoint下边的groove就是完美的这个功能。可惜被微软收购了...

现在共享文件的方式已经够用了。唯一不够的是带宽。

我以前不愿意上传文件到服务器..就是通过web server来提取本地文件的

刻张蓝光DVD,快递过去。

可怜的上传带宽, 想死啊。

汉魅就是这样一款软件啊,但用到了p2p

金山的网盘,不知道是这个原理不,不过金山的是把文件存了一份在服务器上的吧,需要下载一个客户端,有共享给好友的功能!

win平台用了很久的http file server,几百k,非常好用。。

其实能够保证速度就好了

其实能够保证速度就好了

其实能够保证速度就好了

IPv6普及以后,是不是就没有NAT这个障碍了?p2p简单结了。

TeamViewer 应该就是这个原理

dropbox 内建这个功能,把文件放入public文件夹,然后提取url发送给别人即可。

我觉得现在支持外链的同步工具已经很不错了,基本满足要求了。

Pipebytes是一个基于p2p的大文件分享网站。不过需要网站中转一下。

好像 opera 用的就是这种方式?

如果2人不是同时在线就没法发送了。

如果有这个条件可以发布和共享文件(硬盘、带宽都能承受的起,还接了网通电信双线的话),那还不如直接架设个服务端算了,唯一的成本就是域名了,干脆谁家推出个免费的动态域名解析服务吧。
另外,楼上好多人都说了,现在好多P2P软件就可以做到。

live套件一般都有,只是mesh不会预装。把windows登录帐户能和live帐户关联之后,集成度就很高了。

我觉得MS的skydrive和live mesh就很好用啊。

太好用了,范围太大了,离死就不远了,把你服务器一封。。。

我想到了Maze……

就是ls某人说的,很多p2p的软件都有这样的功能

技术实现没什么发言权,不过实现的功能必须是以下几点:
断点续传(网络总是会不稳定的,QQ这点不错)
完备的文件校验(网盘经常下载后无法打开)
不用客户端

其实很多p2p软件有LZ所说的功能的。

我一般是这样做的:注册一个网易邮箱,然后安装超大附件插件,上传文件存为草稿。
然后通知对方邮箱和密码,让他自己上来下载。


如果按云风的方案,我想多分享给几个人大文件的话,我的硬盘岂不是很容易坏?

可以看看http://www.tonido.com/,这个分享文件不错的。

我的意思是不需要一方安装任何软件,而不需要双方安装特定软件。

如果太大的話,放FTP或是直接快遞好了。

emule的问题是不能一次给多个文件,除非你自己打包。这一点还是BT好。

在我们这里,最大的问题是监管,任何有助于信息不受监管的传递手段都是活不久的。

在emula中创建一个私有链接,然后发给对方,对方输入密码后,直连传输。

美国的话可行,国内普遍 ADSL 上行 512kb,且有南北互联问题

做一个torrent文件传给对方,然后自己做种让对方下载怎么样?

Post a comment

非这个主题相关的留言请到:留言本