2013-04-11 129 views
4

我知道這在this post已被觸及,但我希望對此進行一些額外的說明。Dropbox API,重命名和唯一ID

目前,使用Dropbox Core API,似乎沒有辦法跟蹤已重命名的文件。例如,如果您使用API​​將Dropbox app_folder與本地應用程序目錄同步。您的Dropbox的一側的文件重命名,然後調用delta就看你如何更新您的本地應用程序目錄,您將返回兩個條目...

array(
    0 => '/somefile.txt', 
    1 => null 
), 
array(
    0 => '/somefile-renamed.txt', 
    1 => array(
     'revision' => 343 
     'rev' => 'd90se4c661' 
     'thumb_exists' => false 
     'bytes' => 1263 
     'modified' => 'Tue, 09 Apr 2013 19:06:39 +0000' 
     'client_mtime' => 'Tue, 09 Apr 2013 18:43:06 +0000' 
     'path' => string '/somefile-renamed.txt' 
     'is_dir' => false 
     'icon' => 'page_white_text' 
     'root' => 'app_folder' 
     'mime_type' => 'application/octet-stream' 
     'size' => '1.2 KB' 
    ) 
) 

對於每個返回數組,第一個元素是文件需要更新,第二個元素是文件元數據信息。如果第二個元素是null,則應刪除該文件的本地版本(及其下的任何內容,如果它是目錄的話)。

因此,在上面的例子中,它告訴你刪除第一個文件並上傳這個全新的文件。不幸的是,沒有辦法跟蹤你被告知創建的這個新文件實際上只是你要刪除的文件的重命名版本。從您的應用程序的角度來看(非Dropbox方面),它看起來像是一個海峽刪除和一個新文件進來。

如果您將數據存儲在其他地方的這些文件中(如在數據庫中),您需要更新記錄而不是創建新記錄並刪除舊記錄。

是否有一些可接受的方式來重命名後跟蹤文件關聯?我似乎無法找到使用元數據,增量或修訂版的方法。

回答

3

我不認爲Dropbox知道重命名和刪除/添加文件的區別。每當我在硬盤上的本地Dropbox文件夾中重命名文件時,我都會立即看到舊文件重新出現時帶有「已刪除」圖標疊加層,而新文件顯示「正在上傳」圖標。

通過比較已刪除和創建的文件的內容(也許還會比較時間戳),您可能能夠以合理的準確度檢測重命名,但即使如此也是如此。

+0

是的,有一點我試圖通過存儲文件內容的散列來確定,但它感覺非常噁心,所以我[退縮](http://www.youtube.com/watch?v=2iE4uEsaBF0&feature= youtu.be&t = 10s)。 – wlvrn 2013-04-11 14:30:43

+0

API有一個'move'方法:https://www.dropbox.com/developers/core/docs#fileops-move用它做什麼你會=) – Rudie 2013-12-23 18:53:33

-1

在保管箱中,如果你有一個文件,你想重新命名它,那麼只需按照這個邏輯它將解決你的問題。

  1. 獲取文件的名稱並更改它,並將更改名稱存儲在字符串變量中。
  2. 保留原始文件的父路徑。
  3. 將文件移動到其他地方並更改名稱從字符串變量中獲取。
  4. 現在移動文件從新的地方,老地方回來,
    How to do it Programatically, 
Entry global_file;//assign any file to it 
    String FilePath=global_file.path; 
    String parent_path=global_file.parentPath();//Keep parent path 

    String ChanageName= "Your changed Name"; 
    parent_path=parent_path+""+ChanageName; //setting path for renamed file to move to its original place. 


    Entry RenamedFile = mApi.move(FilePath, "/"+ChanageName); //move to new place "/" 
    Entry MoveRenameFile = mApi.move(RenamedFile.path,parent_path); //move to previous location 
+0

要重命名一個文件,只需使用Move API,然後提供原始路徑和新路徑。這就像在Linux上重命名文件一樣。 – 2014-11-20 02:40:04

+0

兩位消極的選民來自窗戶,他們不知道重命名是什麼關於..!這對我很好,所以投票。 – 2015-09-27 07:31:51

0

不幸的是跟蹤文件的唯一方式重命名通過Dropbox的API是存儲的內容哈希每一個你需要跟蹤的文件。

這是我如何檢測重命名:

  1. 呼叫/delta直到Dropbox的告訴我打退堂鼓了。

  2. 現在,我有變化的完整列表,過濾文件的這份名單爲:

    • 更新的文件
    • 刪除的文件
    • 新文件
  3. 閱讀內容每個新文件並散列其內容。

  4. 對於每個被刪除的文件,查找您存儲的哈希值,然後根據每個新文件的哈希值檢查。如果兩個哈希匹配,那麼該文件已被重命名。

N.B.這種技術只有在用戶修改文件的時候才能更新文件。如果您的應用使用Dropbox webhook並且用戶未在離線時編輯,然後移動文件,則可能會發生這種情況。

我希望Dropbox最終通過他們的API暴露文件重命名。

0

因爲client_mtime和文件大小重命名不變,所以可以找到重命名的文件。這是一種破解,但比檢查哈希更容易。