7

関数 metatada の Dropbox rest api には、「hash」という名前のパラメーターがありますhttps://www.dropbox.com/developers/reference/api#metadata

リモート API レスト関数を呼び出さずに、このハッシュをローカルで計算できますか?

アップロード帯域幅を減らすには、この値を知る必要があります。

4

5 に答える 5

5

メタデータ呼び出しの「ハッシュ」パラメーターは、実際にはファイルのハッシュではなく、メタデータのハッシュです。その目的は、メタデータ リクエスト中にメタデータを提供することで、メタデータが変更されていない場合に、リクエストでメタデータを再ダウンロードする必要をなくすことです。ファイル ハッシュとして使用するためのものではありません。

残念ながら、Dropbox API を介してファイル自体のハッシュを取得する方法がわかりません。アップロード帯域幅を減らすための最善の策は、ファイルのハッシュをローカルで追跡し、アップロードするかどうかを決定するときにそれらが変更されたかどうかを検出することだと思います. システムによっては、Dropbox 自体のバージョンが変更されたかどうかを確認できるように、メタデータ リクエストで返される "rev" (リビジョン) 値を追跡することもできます。

于 2012-10-22T18:09:07.200 に答える
5

https://www.dropbox.com/developers/reference/content-hashでは、Dropbox がファイル ハッシュを計算する方法について説明しています。これの Python 実装は次のとおりです。

import hashlib
import math
import os

DROPBOX_HASH_CHUNK_SIZE = 4*1024*1024

def compute_dropbox_hash(filename):
    file_size = os.stat(filename).st_size
    with open(filename, 'rb') as f:
        block_hashes = b''
        while True:
            chunk = f.read(DROPBOX_HASH_CHUNK_SIZE)
            if not chunk:
                break
            block_hashes += hashlib.sha256(chunk).digest()
        return hashlib.sha256(block_hashes).hexdigest()
于 2017-10-03T22:42:26.120 に答える