4

現在、Javaで分散システムの宿題をしているので、複数のコンピューターから構成ファイルの1つのコピーにアクセスする必要があります。これで、次のようなドロップボックスWebページから共有ファイルを読み取って解析できるようになりました:https ://www.dropbox.com/s/ysn9yivqj7kwo0w/config.yaml 。私がやりたいのは、このファイルが変更されたかどうかを検出するデーモンスレッドを追加することです。変更された場合は、システムのすべてのノードを再構成する必要があります。

しかし、ファイル全体をダウンロードしてから差分をとることなく、このファイルがプログラム内で変更されたかどうかを判断するにはどうすればよいですか?ドロップボックスはタイムスタンプのようなものをファイルに追加する必要があると思いますが、どうすればこのタイムスタンプにアクセスできますか?

どんな提案でも大歓迎です、どうもありがとう!

4

3 に答える 3

2

content-md5を見てみます。したがって、以前のバージョンのmd5を保持し、それらが一致しない場合は、ファイルをダウンロードします。

于 2013-01-24T01:47:20.793 に答える
1

SDKフォームのドロップボックスを使用している場合は、次の方法でファイルのメタデータを取得できます。

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

を介してファイルの最終変更日またはハッシュを確認します

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

解決策1

APIドキュメントによると、/metadataファイルとフォルダのメタデータを取得します。ハッシュ(md5)を比較して確認する

URL構造https://api.dropbox.com/1/metadata/auto/<path>

指定されたファイルまたはフォルダのメタデータを返します。がフォルダを表し、listパラメータがtrueの場合、メタデータにはフォルダのコンテンツのメタデータのリストも含まれます。

Javaでの使用

JavaSDKドキュメントから

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(ハッキーな回避策)

残念ながら、Dropboxはファイルのハッシュを提供せず、ディレクトリのみを提供します。したがって、同期にdropbox APIを使用して開発している場合は、次のいずれかを実行できます

  • ファイルをダウンロードするときは、リビジョン番号が含まれているrevパラメータをコピーします
  • ローカルファイルとクラウドファイルの最終変更を比較します(注:常に機能することは保証されていません。2人が同時にローカルでファイルを編集し、そのうちの1人がドラフトファイルを上書きすると、誤検知が発生する可能性があります)。
于 2015-02-23T16:18:39.933 に答える