我一直在关注DropBox Mac客户端,我正在研究为不同的服务实现类似的界面。
他们如何与Finder这样接口?我非常怀疑文件夹中表示的这些对象是每次加载时下载的实际文档吗?他们必须根据需要动态下载。那么如何在没有实际文件系统对象的情况下在finder中显示这些项?
有谁知道在Mac OS X中如何实现这一目标?
或者指向Apple API或其他与finder类似集成的开源项目的指针?
答案 0 :(得分:31)
Dropbox不支持MacFUSE或WebDAV,尽管这些可能是您尝试完成的完美解决方案。
如果它是由那些东西驱动的,那么当你没有连接时它就不会工作,因为它们都依赖于服务器存储实际信息而Dropbox没有。如果我退出Dropbox(通过菜单项完成)并断开网络连接,我仍然可以使用这些文件。那是因为文件实际存储在我的硬盘上。
这也意味着文件不需要“在每次加载时下载”,因为它们实际上存储在我的机器上。相反,只通过线路发送增量,Dropbox应用程序(在后台运行)适当地修补文件。另一方面,Dropbox应用程序监视Dropbox文件夹中的文件,当它们发生变化时,它会向服务器发送适当的增量,并将它们传播到任何其他客户端。
此设置具有一些明显的优势:它在脱机时工作,速度提高了一个数量级,并且对其他应用程序是透明的,因为它们只是看到磁盘上的文件。但是,我不知道它如何处理合并冲突(这可能很容易在一个或多个客户端脱机时出现),如果服务器是唯一的副本并且每个编辑都更改了中央副本,则这不是问题。
Dropbox真正让人眼前一亮的是,他们还有一个额外的技巧,用它们当前的同步状态标记Dropbox文件夹中的项目。但这不是你在这里问的问题。
就目前的问题而言,你一定要研究MacFUSE和WebDAV,这可能是你问题的完美解决方案。但Dropbox的处理方式,后台应用程序更改磁盘上的实际文件,可能是一个更好的权衡。
答案 1 :(得分:11)
Dropbox可能会使用FSEvents来监视文件系统的更改。这是一个很棒的API,甚至可以捆绑您的应用未运行时发生的更改。它与Spotlight使用的API相同。菜单栏应用程序可能会进行实际观察(例如,重新启动它可以修复挂起的上传内容)。
他们无法使用MacFUSE,因为这需要安装MacFUSE内核扩展以使Dropbox正常工作,而且由于我绝对没有安装它,我非常怀疑他们是否正在使用它。
答案 2 :(得分:6)
答案 3 :(得分:3)
客户端上的Dropbox是用python编写的。 客户端似乎使用sqlite3数据库来索引文件。 我想Dropobox会以块的形式分割文件,以减少带宽的使用。 顺便说一下,它有两个人拥有相同的文件,即使他们彼此不认识,服务器也可以优化并避免多次传输文件,只在服务器端复制它
答案 4 :(得分:2)
对我而言,感觉就像一个经过大量修改的修订控制系统。它具有所有功能:基于增量更新文件,恢复或恢复旧版本文件的选项。几乎感觉他们正在使用git(GitFS?),或者他们设计的一些文件系统。
答案 5 :(得分:2)
你也可以试试File Conveyor。它是一个Python守护程序,能够立即检测FS更改(在Linux上通过inotify
,在OS X上通过FSEvents
),处理文件和将它们同步到一个或多个目的地。
支持的协议:FTP,SFTP,Amazon S3(也支持CloudFront),Rackspace云文件。可以轻松扩展。使用django-storages
。
“处理文件”:例如优化图像,转码视频 - 这最初被设想用于在加速网站的情况下将静态资产发送到CDN)