2013-04-11 128 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和文件大小重命名不变,所以可以找到重命名的文件。这是一种破解,但比检查哈希更容易。