4

Now I'm doing a distributed systems homework in Java, so I need to access one copy of configuration file from several computers. And now I could read and parse a shared file from dropbox webpage, like this one: https://www.dropbox.com/s/ysn9yivqj7kwo0w/config.yaml. What I want to do is to add a daemon thread to detect whether this file has been changed or not, if changed, I need to re-config every node of system.

But how can I judge whether this file has been changed or not IN PROGRAM, without downloading the whole file and then to do some diff? I think dropbox should add something like timestamps to files, but how can I get access to this timestamp?

Any suggestion is welcome, much thanks!

4

3 回答 3

2

I'd look at the content-md5. So you keep an md5 of your previous version and if they don't match, then download the file.

于 2013-01-24T01:47:20.793 回答
1

如果您使用sdk form dropbox,您可以通过以下方式获取文件的元数据

    meta = api.metadata(path, 1, null, false, null);

并通过检查文件的最后修改日期或哈希

    meta.hash;
    meta.modified;
于 2013-01-24T05:47:48.223 回答
0

解决方案 1

根据API 文档/metadata检索文件和文件夹元数据。比较哈希 (md5) 以检查

网址结构https://api.dropbox.com/1/metadata/auto/<path>

返回给定的文件或文件夹的元数据。如果表示文件夹并且 list 参数为 true,则元数据还将包括文件夹内容的元数据列表。

在 Java 中使用

来自Java SDK 文档

public DbxEntry getMetadata(String path)
                     throws DbxException
Get the file or folder metadata for a given path.
 DbxClient dbxClient = ...
 DbxEntry entry = dbxClient.getMetadata("/Photos");
 if (entry == null) {
     System.out.println("No file or folder at that path.");
 } else {
     System.out.print(entry.toStringMultiline());
 }

参数

path - 文件或文件夹的路径(请参阅 DbxPath)。

退货

如果给定路径有文件或文件夹,则返回该路径的元数据。如果那里没有文件或文件夹,则返回 null。

投掷

数据库异常

更新

解决方案 2(Hacky 解决方法)

不幸的是,Dropbox 不为文件提供哈希值,它只为目录提供哈希值。因此,如果您正在使用 Dropbox API 进行同步开发,您可以执行以下操作之一

  • 下载文件时,复制包含修订号的 rev 参数
  • 比较本地和云文件的上次修改(注意:不保证始终有效。如果 2 个人同时在本地同时编辑文件并且其中一个人覆盖草稿文件,您可能会得到误报)。
于 2015-02-23T16:18:39.933 回答