2008-10-09 98 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)