2008-10-09 96 views
10

我一直在寻找DropBox Mac客户端,我目前正在研究为不同的服务实现类似的接口。DropBox Mac客户端如何工作?

他们究竟如何与这样的发现者接口?我非常怀疑文件夹中表示的这些对象是否是每个负载下载的实际文档?他们必须在需要时动态下载。那么如何在不具有实际文件系统对象的情况下在查找器中显示这些项目?

有谁知道这是如何在Mac OS X中实现?

或者任何指向Apple API或其他与finder具有类似集成的开源项目的指针?

回答

6

两个建议:

前者将允许你写显示为一个文件系统,并做了所有正确的事情,一个应用程序;后者将允许您移动服务器端的所有内容,并让用户将您的服务作为文件共享进行安装。

+0

MacFUSE正是我所需要的。我完全忘记了它。 谢谢你。 – 2008-10-09 03:40:01

31

Dropbox不支持MacFUSE或WebDAV,尽管这些可能是完美的解决方案。

如果它是由这些东西驱动的,当你没有连接时它不会工作,因为这两个都依赖于服务器来存储实际的信息,Dropbox不会。如果我退出Dropbox(通过菜单项完成)并断开网络,我仍然可以使用这些文件。这是因为这些文件实际上存储在我的硬盘上。

这也意味着这些文件不需要“每次下载”,因为它们实际上存储在我的机器上。相反,只有通过线路发送增量,并且Dropbox应用程序(在后台运行)适当地修补文件。另一方面,Dropbox应用程序监视Dropbox文件夹中的文件,当它们发生变化时,它会向服务器发送适当的变化量,并将这些变化量传播给任何其他客户端。

此设置具有一些明显的优势:它脱机时可以工作,速度提高了一个数量级,对其他应用程序来说它是透明的,因为它们只是看到磁盘上的文件。但是,我不知道它是如何处理合并冲突(这可能会在一个或多个离线客户端容易出现),如果服务器是唯一的副本,并且每个编辑都会更改该中心副本,则这不是问题。

Dropbox的真正亮点在于他们有一个额外的技巧,可以用Dropbox文件夹中的项目标记当前同步状态。但这不是你在这里问的。至于这个问题,你应该看看MacFUSE和WebDAV,这可能是你的问题的完美解决方案。但Dropbox做事的方式,后台应用程序更改磁盘上的实际文件可能是一个更好的折衷方案。

+2

关于冲突,Dropbox显然不会(永远)[尝试合并更改](https://www.dropbox.com/help/36)。相反,它会创建两个文件。 – mjs 2009-11-17 00:11:19

11

Dropbox可能使用FSEvents来监视文件系统的更改。这是一个非常棒的API,甚至可以将应用程序未运行时发生的更改捆绑在一起。这与Spotlight使用的API相同。菜单栏应用程序可能会自己实际观察(例如,重新启动它可以修复挂起的上传)。

他们没有办法使用MacFUSE,因为这需要安装MacFUSE内核扩展才能使Dropbox工作,而且由于我绝对没有安装它,所以我非常怀疑他们正在使用它。

2

对我来说,感觉就像一个经过大量修改的版本控制系统。它具有所有功能:基于增量更新文件,恢复或恢复文件旧版本的选项。它几乎感觉他们正在使用git(GitFS?),或者他们设计的一些文件系统。

3

客户端上的Dropbox是用python编写的。 客户端似乎使用sqlite3数据库来索引文件。 我想Dropobox将文件分块,以减少带宽使用。 顺便说一下,它是两个人有相同的文件,即使他们不知道对方,服务器可以优化和避免多次传输文件,只在服务器端拷贝它

+0

在我看来,如果两个人有相同的文件,那么它不会第二次上传。但是,这意味着文件未在客户端加密,但Dropbox文档表明它是。您认为Dropbox服务器上只保存了同一文件的一个副本的原因是什么? – mjs 2010-06-23 17:30:31

2

你也可以给File Conveyor一试。它是一个Python守护进程,能够立即检测FS变化(在Linux上通过inotify,在OS X到FSEvents之间),处理文件将它们同步到一个或多个目标。

支持的协议:FTP,SFTP,Amazon S3(也支持CloudFront),Rackspace Cloud Files。可以很容易地扩展。用途django-storages

“处理文件”:例如,优化图像,转码视频 - 这最初被设想为用于在加速网站的情况下将静态资产发送到CDN)