现在我正在使用Java进行分布式系统作业,因此我需要从多台计算机访问配置文件的一个副本。现在我可以从dropbox网页上读取和解析共享文件,例如:https://www.dropbox.com/s/ysn9yivqj7kwo0w/config.yaml。 我想要做的是添加一个守护程序线程来检测此文件是否已更改,如果更改,我需要重新配置系统的每个节点。
但是如何判断这个文件是否已经改变IN PROGRAM,没有下载整个文件然后做一些差异?我认为dropbox应该为文件添加类似时间戳的内容,但是如何才能访问此时间戳呢?
欢迎任何建议,非常感谢!
答案 0 :(得分:2)
我会看一下内容-md5。所以你保留了以前版本的md5,如果它们不匹配,则下载文件。
答案 1 :(得分:1)
如果您使用sdk form dropbox, 您可以通过
获取文件的元数据 meta = api.metadata(path, 1, null, false, null);
并通过
检查文件的最后修改日期或哈希值 meta.hash;
meta.modified;
答案 2 :(得分:0)
解决方案1
根据API documentation,/metadata
检索文件和文件夹元数据。比较哈希(md5)以检查
网址结构:https://api.dropbox.com/1/metadata/auto/<path>
返回给定文件或文件夹的元数据。如果表示文件夹且list参数为true,则元数据还将包含文件夹内容的元数据列表。
在Java中使用
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。
<强>抛出强>
DbxException
<强>更新强>
解决方案2(Hacky解决方法)
不幸的是,Dropbox没有为文件提供哈希值,它只提供目录。因此,如果您正在使用Dropbox API进行同步开发,则可以执行以下操作之一